2026-09-04

今日主题

  • Markdown autolink 语法与 kramdown 实现

新增认知

  • 独立成段裸URL统一转autolink:博客站点里独立成段(含 > 引用块内)的引用型裸 URL,
    应统一写成 <https://xxx> 形式而非裸写,因为这是 Markdown 家族的标准 autolink 语法,
    Jekyll 的 kramdown 解析器会将其渲染成 <a> 标签;已在项目写作规范中固化该约定,
    并对历史迁移文章(Dubbo之父系列)中 xxx(http://…) 这类嵌在括号里的裸链接做了统一改造,处理方式是整体给括号内容套上尖括号,
    不改变原文括号语义。

  • autolink 规范与实现分层:autolink(<url> 自动转链接)是 Markdown 语法家族在规范层面定义的行为——
    最早见于 Gruber 原始 Markdown 语法说明,
    CommonMark 后来将其形式化为可判定的 BNF 规则(< + 合法 scheme URI 或 email + >);但"规范"只是文字/形式化描述,
    真正识别和转换是各个解析器自己实现的代码逻辑。kramdown 有自己独立的语法文档(非纯 CommonMark 实现),
    按自己的 span 解析规则实现了 autolink,因此不同库在 scheme 合法性、邮箱格式校验宽松度等细节上可能有出入。

  • kramdown 的两阶段处理定位:kramdown 处理 <https://xxx> 是在其 span-level(行内)解析阶段完成的,
    属于内置的 autolink 语法规则,与其对裸 HTML <a> 标签的内联 HTML 解析规则是两条不同路径——
    autolink 的识别条件是尖括号内内容形如合法 URI/email,而不是按 HTML 标签名匹配。
    Jekyll 通过 _config.yml 的 markdown: kramdown 选定该引擎,构建时把 .md 解析成 AST 再转换为 HTML,
    链接的视觉样式由站点 CSS 单独负责,与 kramdown 的解析行为无关。