菜单

Markdown 处理

相关源文件

本文档描述了 Hugo 如何处理 Markdown 内容,将其从原始 Markdown 文本转换为可在模板中使用的 HTML。Hugo 的 Markdown 处理系统以 Goldmark 库为核心,该库是自 Hugo v0.60.0 以来的默认 Markdown 处理器。有关 front matter 解析的信息,请参阅 Front Matter Parsing,有关生成目录的详细信息,请参阅 Table of Contents Generation

Markdown 处理概述

Hugo 使用基于管道的方法将 Markdown 内容转换为 HTML。该过程涉及将 Markdown 解析为抽象语法树 (AST),对该树应用转换,然后将树渲染为 HTML。

来源

Goldmark 配置

Hugo 的 Markdown 处理通过站点配置高度可配置。默认配置在标准 Markdown 兼容性和有用扩展之间提供了平衡。

来源

Markdown 转换器实现

Hugo Markdown 处理的核心是 goldmarkConverter 结构体,它实现了 converter.Converter 接口。此转换器负责解析 Markdown 内容、生成目录以及渲染最终的 HTML。

转换过程包含三个主要阶段

  1. 解析:将 Markdown 文本转换为抽象语法树 (AST)
  2. 转换:应用诸如标题 ID 生成和 ToC 构建之类的转换
  3. 渲染:将 AST 渲染为 HTML

来源

标题 ID 生成

Hugo 提供多种生成标题 ID 的策略来支持锚链接

  1. github:与 GitHub 兼容的标题 ID(默认)
  2. github-ascii:与 GitHub 兼容的标题 ID,仅包含 ASCII 字符
  3. blackfriday:旧版 Blackfriday 风格的标题 ID

ID 生成过程会清理标题文本,并通过为重复项添加数字后缀来确保唯一性。

来源

目录生成

Hugo 会自动从 Markdown 标题生成目录。这被实现为一个 AST 转换器,它在 Markdown 处理过程中收集标题及其元数据。

目录可通过模板中的 .TableOfContents 变量访问。

来源

属性扩展

Hugo 通过支持标题、代码块和其他元素的自定义属性来扩展 Goldmark。这允许为 Markdown 元素添加 CSS 类、ID 和其他 HTML 属性。

来源

Goldmark 扩展

Hugo 使用多个扩展来配置 Goldmark,以增强 Markdown 功能集。这些扩展在 newMarkdown 函数中初始化。

扩展描述默认
排版智能引号、破折号、省略号已启用
表格Markdown 表格已启用
删除线删除线 语法已启用
链接化自动将 URL 转换为链接已启用
任务列表GitHub 风格的任务列表已启用
定义列表定义列表已启用
脚注脚注支持已启用
CJKCJK 语言支持已禁用
其他删除、插入、标记等。可变
直通原始内容直通已禁用

来源

内容助手

Hugo 提供了几个用于处理已渲染 Markdown 内容的助手函数

来源

与语法高亮集成

Hugo 将 Markdown 代码块与语法高亮系统集成。启用代码围栏后,代码块将被处理,以根据指定的语言添加语法高亮。

代码块渲染器支持多种选项,如行号、行高亮等。

来源

结论

Hugo 的 Markdown 处理系统提供了一种强大而灵活的方式,可以将 Markdown 内容转换为 HTML。它围绕 Goldmark 库构建,提供了广泛的配置选项、各种扩展以及与 Hugo 的其他功能(如语法高亮和模板渲染)的紧密集成。

该系统旨在符合 CommonMark 规范,同时提供增强内容创作体验的附加功能。