解析器 (Parser)

Snow 通过内容解析器把 .md.org.html 文件转换为统一的 Page / Section 数据。

内置解析器

解析器 扩展名 引擎 默认启用 说明
markdown .md goldmark Markdown 内容,支持 YAML/TOML FrontMatter
orgmode .org org-golang 默认 Org-mode 解析器
niklasfasching .org niklasfasching/go-org 可选 Org-mode 解析器
html .html Go HTML parser HTML 文档或片段

HTML 和 niklasfasching parser 已在 CLI 中注册,但默认未启用。需要使用时在 markups 中开启:

1markups:
2  html:
3    enabled: true
4  niklasfasching:
5    enabled: true

orgmodeniklasfasching 都处理 .org 文件。如果同时启用,当前注册顺序下 niklasfasching 会优先接管 .org,默认的 orgmode 不再处理同一扩展名。

元数据

格式 元数据来源
Markdown YAML ---、TOML +++、或文件开头的 key: value
Org-mode :PROPERTIES: drawer、文件开头的 #+KEY:#+PROPERTY:
HTML <head> 中的 <title><meta><link><script>

Markdown FrontMatter 示例:

1---
2title: "我的文章"
3date: 2024-01-15
4tags:
5  - go
6  - web
7draft: false
8---

启用 markups.markdown.directive_blocks 后,Markdown 支持类似 Org-mode 的指令块:

1markups:
2  markdown:
3    directive_blocks: true
 1:::export html
 2<div class="raw-html">
 3  <span>原样输出 HTML</span>
 4</div>
 5:::
 6
 7:::center
 8这里的 **Markdown** 会继续解析,并包裹在 `<div style="text-align: center;">` 中。
 9:::
10
11:::quote
12这里的 **Markdown** 会继续解析,并包裹在 `<blockquote>` 中。
13:::
14
15:::shortcode notice type=info
16这里的 **Markdown** 会继续解析,并作为 shortcode body 传入。
17
18- static-site
19- go
20:::

:::shortcode 是 Markdown 指令块中的短代码写法,详细用法见 短代码 (Shortcode)

HTML parser 会把 <head> 中的标签转换为 FrontMatter:

HTML 标签 写入字段
<title> title
<meta name="date" content="..."> date
<meta property="og:title" content="..."> og.title
<meta itemprop="description" content="..."> description
<link rel="stylesheet" href="..."> 追加到 links
<script src="..."> 追加到 scripts

正文与摘要

格式 正文来源 摘要分隔符
Markdown Markdown 渲染结果 <!--more-->
Org-mode Org 渲染结果 #+snow: more#+html: <!--more-->
HTML <body> 子节点;没有完整文档结构时把 HTML 片段作为正文 <!--more-->

Org-mode 的摘要分隔符使用 Snow 专用 keyword:

1summary
2#+snow: more
3content

也可以使用导出 HTML keyword,便于沿用已有 Org 内容:

1summary
2#+html: <!--more-->
3content

Toc

启用 markups._default.show_toc 或对应 parser 的 show_toc 后,解析器会生成 Toc

Markdown 和 Org-mode 根据标题结构生成目录。HTML parser 会扫描 h1-h6,保留已有 id,并为缺少 id 的标题自动补上 heading-...

markups._default.toc_id 或对应 parser 的 toc_id 可切换自动生成的锚点:

说明
title 默认值,使用标题文本生成锚点,例如 Hello World 生成 hello-world,中文会保留
index 使用 heading-1heading-1.1 这类稳定编号

模板 Filter

Filter 说明
parser:"markdown" 使用 Markdown parser 把字符串转为 HTML
parser:"orgmode" 使用默认 Org-mode parser 把字符串转为 HTML
parser:"niklasfasching" 使用 niklasfasching/go-org 把字符串转为 HTML;只有 markups.niklasfasching.enabled: true 时可用

parser filter 只会调用当前配置中已启用的解析器。解析器未启用或格式名不存在时,模板渲染会返回错误。

错误处理与限制

Markdown 与 Org-mode 解析器支持最长约 1MB 的单行内容。Markdown FrontMatter 必须使用同类型 fence 闭合;Org-mode 的 :PROPERTIES: drawer 必须以 :END: 闭合,否则构建会报错。

HTML parser 基于 Go HTML tree parser。解析错误会直接返回并中止构建。

©2026 · 红枫文档