spec.txt   spec.txt 
--- ---
标题: CommonMark 规范 标题: CommonMark 规范
作者: John MacFarlane 作者: John MacFarlane
版本: 0.21 版本: 0.22
日期: 2015-07-14 日期: 2015-08-23
许可: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' 许可: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)'
... ...
# 引言 # 引言
## 什么是 Markdown? ## 什么是 Markdown?
Markdown 是一种用于编写结构化文档的纯文本格式, Markdown 是一种用于编写结构化文档的纯文本格式,
基于在电子邮件和 usenet 帖子中用于表示格式的约定。 基于在电子邮件和 usenet 帖子中用于表示格式的约定。
它由 John Gruber 于 2004 年开发,他编写了 它由 John Gruber 于 2004 年开发,他编写了
跳转至第 207 行的变更 跳转至第 207 行的变更
在示例中,使用 `→` 字符来表示制表符(tab)。 在示例中,使用 `→` 字符来表示制表符(tab)。
# 序言 # 序言
## 字符与行 ## 字符与行
任何[字符]序列都是有效的 CommonMark 任何[字符]序列都是有效的 CommonMark
文档。 文档。
一个 [字符](@character) 是一个 unicode 码位(code point)。 一个 [字符](@character) 是一个 Unicode 码位。尽管有些
码位(例如,组合变音符号)在直觉上并不对应于
字符,但就本规范而言,所有码位都算作字符。
for purposes of this spec.
本规范未指定编码;它将行视为由 本规范未指定编码;它将行视为由
字符组成,而非字节。符合规范的解析器可能限于 [字符]组成,而非字节。符合规范的解析器可能限于
特定的编码。 特定的编码。
一个 [行](@line) 是零个或多个 [字符] 的序列, 一个 [行](@line) 是零个或多个 [字符] 的序列,
不包含换行符(`U+000A`)或回车符(`U+000D`),
并以 [行结束符] 或文件结束符结尾。 并以 [行结束符] 或文件结束符结尾。
一个 [行结束符](@line-ending) 是一个换行符(`U+000A`)、回车符 一个 [行结束符](@line-ending) 是一个换行符(`U+000A`)、一个回车符
(`U+000D`),或回车符+换行符。 (`U+000D`)且后面没有换行符,一个回车符
随后的换行符。
不包含任何字符的行,或仅包含空格 不包含任何字符的行,或仅包含空格
(`U+0020`)或制表符(`U+0009`)的行,称为 [空行](@blank-line)。 (`U+0020`)或制表符(`U+0009`)的行,称为 [空行](@blank-line)。
本规范将使用以下字符类定义: 本规范将使用以下字符类定义:
一个 [空白字符](@whitespace-character) 是空格 一个 [空白字符](@whitespace-character) 是空格
(`U+0020`)、制表符(`U+0009`)、换行符(`U+000A`)、行制表符(`U+000B`)、 (`U+0020`)、制表符(`U+0009`)、换行符(`U+000A`)、行制表符(`U+000B`)、
换页符(`U+000C`)或回车符(`U+000D`)。 换页符(`U+000C`)或回车符(`U+000D`)。
[空白](@whitespace) 是一个或多个 [空白字符] 的序列。 [空白](@whitespace) 是一个或多个 [空白字符] 的序列。
字符]s。 字符]s。
一个 [unicode 空白字符](@unicode-whitespace-character) 是 一个 [Unicode 空白字符](@unicode-whitespace-character) 是
任何 unicode `Zs` 类中的码位,或制表符(`U+0009`)、 任何 Unicode `Zs` 类中的码位,或制表符(`U+0009`)、
回车符(`U+000D`)、换行符(`U+000A`)或换页符 回车符(`U+000D`)、换行符(`U+000A`)或换页符
(`U+000C`)。 (`U+000C`)。
[Unicode 空白](@unicode-whitespace) 是一个或多个 [Unicode 空白](@unicode-whitespace) 是一个或多个
[unicode 空白字符] 的序列。 [Unicode 空白字符] 的序列。
一个 [空格](@space) 是 `U+0020`。 一个 [空格](@space) 是 `U+0020`。
一个 [非空白字符](@non-space-character) 是任何不是 一个 [非空白字符](@non-whitespace-character) 是任何不是
[空白字符] 的字符。 [空白字符] 的字符。
一个 [ASCII 标点字符](@ascii-punctuation-character) 一个 [ASCII 标点字符](@ascii-punctuation-character)
是 `!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`, 是 `!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`,
`*`, `+`, `,`, `-`, `.`, `/`, `:`, `;`, `<`, `=`, `>`, `?`, `@`, `*`, `+`, `,`, `-`, `.`, `/`, `:`, `;`, `<`, `=`, `>`, `?`, `@`,
`[`, `\`, `]`, `^`, `_`, `` ` ``, `{`, `|`, `}`, 或 `~`。 `[`, `\`, `]`, `^`, `_`, `` ` ``, `{`, `|`, `}`, 或 `~`。
一个 [标点字符](@punctuation-character) 是一个 [ASCII 一个 [标点字符](@punctuation-character) 是一个 [ASCII
标点字符] 或任何在 标点字符] 或任何在
unicode 类 `Pc`、`Pd`、`Pe`、`Pf`、`Pi`、`Po` 或 `Ps` 中的字符。 Unicode 类 `Pc`、`Pd`、`Pe`、`Pf`、`Pi`、`Po` 或 `Ps` 中的字符。
## 制表符 ## 制表符
行中的制表符不会扩展为 [空格][space]。但是, 行中的制表符不会扩展为 [空格][space]。但是,
在缩进对文档结构有意义的上下文中, 在缩进对文档结构有意义的上下文中,
制表符的行为就像它们被替换为 制表符的行为就像它们被替换为
以 4 个字符为制表位(tab stop)的空格一样。 以 4 个字符为制表位(tab stop)的空格一样。
. .
→foo→baz→→bim →foo→baz→→bim
跳转至第 303 行的变更 跳转至第 309 行的变更
. .
. .
>→foo→bar >→foo→bar
. .
<blockquote> <blockquote>
<p>foo→bar</p> <p>foo→bar</p>
</blockquote> </blockquote>
. .
.
foo
→bar
.
<pre><code>foo
bar
</code></pre>
.
## 不安全字符 ## 不安全字符
出于安全考虑,Unicode 字符 `U+0000` 必须被替换 出于安全考虑,Unicode 字符 `U+0000` 必须被替换
使用替换字符(`U+FFFD`)。 使用替换字符(`U+FFFD`)。
# 区块与行内元素 # 区块与行内元素
我们可以将文档视为一系列的 我们可以将文档视为一系列的
[块](@block)——结构元素,如段落、块 [块](@block)——结构元素,如段落、块
引用、列表、标题、分割线和代码块。某些块(如 引用、列表、标题、分割线和代码块。某些块(如
跳转至第 564 行的变更 跳转至第 579 行的变更
<hr /> <hr />
</li> </li>
</ul> </ul>
. .
## ATX 标题 ## ATX 标题
一个 [ATX 标题](@atx-header) 一个 [ATX 标题](@atx-header)
由一串字符组成,被解析为行内内容,位于 由一串字符组成,被解析为行内内容,位于
起始的 1--6 个未转义的 `#` 字符和一个可选的 起始的 1--6 个未转义的 `#` 字符和一个可选的
结尾的任意数量的 `#` 字符之间。起始序列 结尾的任意数量的 未转义的 `#` 字符。
的 `#` 字符后面不能直接跟一个 的 `#` 字符后面不能直接跟一个
[非空白字符]。可选的结尾 `#` 序列必须 [非空白字符]。可选的结尾 `#` 序列必须
前面有一个 [空格],并且后面只能跟空格。起始的 前面有一个 [空格],并且后面只能跟空格。起始的
`#` 字符可以缩进 0-3 个空格。标题的原始内容 `#` 字符可以缩进 0-3 个空格。标题的原始内容
在作为行内内容解析之前,会去除前导和尾随空格。 在作为行内内容解析之前,会去除前导和尾随空格。
标题级别等于起始序列中 `#` 字符的数量。 标题级别等于起始序列中 `#` 字符的数量。
characters in the opening sequence. characters in the opening sequence.
简单标题 简单标题
. .
跳转至第 697 行的变更 跳转至第 712 行的变更
. .
结束序列后允许有空格 结束序列后允许有空格
. .
### foo ### ### foo ###
. .
<h3>foo</h3> <h3>foo</h3>
. .
一串 `#` 字符,后面跟着 一个 一串 `#` 字符,后面跟着 除 [空格] 之外的任何内容
[非空白字符]
不是结尾序列,而是计作标题内容的一部分。 不是结尾序列,而是计作标题内容的一部分。
header header
. .
### foo ### b ### foo ### b
. .
<h3>foo ### b</h3> <h3>foo ### b</h3>
. .
结束序列前必须有一个空格 结束序列前必须有一个空格
跳转至第 1637 行的变更 跳转至第 1651 行的变更
5. **开始条件:** 行以字符串 5. **开始条件:** 行以字符串
`<![CDATA[` 开头。\ `<![CDATA[` 开头。\
**结束条件:** 行包含字符串 `]]>`。 **结束条件:** 行包含字符串 `]]>`。
6. **开始条件:** 行以字符串 `<` 或 `</` 开头, 6. **开始条件:** 行以字符串 `<` 或 `</` 开头,
后跟以下字符串之一(不区分大小写):`address`、 后跟以下字符串之一(不区分大小写):`address`、
`article`、`aside`、`base`、`basefont`、`blockquote`、`body`、 `article`、`aside`、`base`、`basefont`、`blockquote`、`body`、
`caption`、`center`、`col`、`colgroup`、`dd`、`details`、`dialog`、 `caption`、`center`、`col`、`colgroup`、`dd`、`details`、`dialog`、
`dir`、`div`、`dl`、`dt`、`fieldset`、`figcaption`、`figure`、 `dir`、`div`、`dl`、`dt`、`fieldset`、`figcaption`、`figure`、
`footer`、`form`、`frame`、`frameset`、`h1`、`head`、`header`、`hr`、 `footer`、`form`、`frame`、`frameset`、`h1`、`head`、`header`、`hr`、
`html`、`legend`、`li`、`link`、`main`、`menu`、`menuitem`、`meta`、 `html`、`iframe`、`legend`、`li`、`link`、`main`、`menu`、`menuitem`、
`nav`、`noframes`、`ol`、`optgroup`、`option`、`p`、`param`、`pre`、 `meta`、`nav`、`noframes`、`ol`、`optgroup`、`option`、`p`、`param`、
`section`、`source`、`title`、`summary`、`table`、`tbody`、`td`、 `section`、`source`、`summary`、`table`、`tbody`、`td`、
`tfoot`、`th`、`thead`、`title`、`tr`、`track`、`ul`,后跟 `tfoot`、`th`、`thead`、`title`、`tr`、`track`、`ul`,后跟
[空白]、行尾、字符串 `>` 或 [空白]、行尾、字符串 `>` 或
字符串 `/>`。\ 字符串 `/>`。\
**结束条件:** 行后紧跟一个 [空行]。 **结束条件:** 行后紧跟一个 [空行]。
7. **开始条件:** 行以 一个 [开始标签] 开头 7. **开始条件:** 行以 一个完整的 [开始标签] 开头
(带有任何 [标签 名称])后跟仅 [空白] 或行尾 或 [结束标签](带有任何 除 `script`、`style` 或 `pre` 之外的 [标签名称])
后跟仅 [空白] 或行尾。\
All types of [HTML blocks] except type 7 may interrupt
**结束条件:** 行后紧跟一个 [空行]。 **结束条件:** 行后紧跟一个 [空行]。
除第 7 类之外的所有 [HTML 块] 类型都可以中断 除第 7 类之外的所有 [HTML 块] 类型都可以中断
一个段落。第 7 类块不能中断段落。 一个段落。第 7 类块不能中断段落。
(这种限制ed旨在防止对包裹段落内的长标签 (这种限制ion旨在防止对包裹段落内的长标签
进行意外的 HTML 块起始解释。) 进行意外的 HTML 块起始解释。)
下面是一些简单的例子。以下是第 6 类的一些基本 HTML 块 下面是一些简单的例子。以下是第 6 类的一些基本 HTML 块
of type 6 of type 6
. .
<table> <table>
<tr> <tr>
<td> <td>
hi hi
跳转至第 1851 行的变更 跳转至第 1866 行的变更
. .
<i class="foo"> <i class="foo">
*bar* *bar*
</i> </i>
. .
<i class="foo"> <i class="foo">
*bar* *bar*
</i> </i>
. .
.
</ins>
*bar*
.
</ins>
*bar*
.
这些规则旨在允许我们处理既可以作为块级元素 这些规则旨在允许我们处理既可以作为块级元素
也可以作为行内级元素标签的标签。 也可以作为行内级元素标签的标签。
`<del>` 标签是一个很好的例子。我们可以用三种不同的方式 `<del>` 标签是一个很好的例子。我们可以用三种不同的方式
用 `<del>` 标签包裹内容。在这种情况下,我们得到一个原始的 用 `<del>` 标签包裹内容。在这种情况下,我们得到一个原始的
HTML 块,因为 `<del>` 标签独占一行。 HTML 块,因为 `<del>` 标签独占一行。
. .
<del> <del>
*foo* *foo*
</del> </del>
跳转至第 2814 行的变更 跳转至第 2837 行的变更
> foo > foo
. .
<blockquote> <blockquote>
<p>bar <p>bar
baz baz
foo</p> foo</p>
</blockquote> </blockquote>
. .
惰性原则仅适用于那些如果在前面加上 `>` 本该是段落 惰性原则仅适用于那些如果在前面加上 `>` 本该是段落
延续的行。例如, 延续的行(如果前面加上 [块引用标记])。例如,
`>` 在第二行中不能被省略。 第二行中的 `> ` 不能被省略。
``` markdown ``` markdown
> foo > foo
> --- > ---
``` ```
否则会改变含义 否则会改变含义
. .
> foo > foo
--- ---
. .
<blockquote> <blockquote>
<p>foo</p> <p>foo</p>
</blockquote> </blockquote>
<hr /> <hr />
. .
同样,如果我们省略了第二行中的 `>`, 同样,如果我们省略了第二行中的 `> `,
``` markdown ``` markdown
> - foo > - foo
> - bar > - bar
``` ```
那么引用块在第一行之后结束 那么引用块在第一行之后结束
. .
> - foo > - foo
跳转至第 2857 行的变更 跳转至第 2880 行的变更
<blockquote> <blockquote>
<ul> <ul>
<li>foo</li> <li>foo</li>
</ul> </ul>
</blockquote> </blockquote>
<ul> <ul>
<li>bar</li> <li>bar</li>
</ul> </ul>
. .
出于同样的原因,我们不能省略前面的 `>` 出于同样的原因,我们不能省略前面的 `> `
缩进代码块或围栏代码块的后续行。 缩进代码块或围栏代码块的后续行。
. .
> foo > foo
bar bar
. .
<blockquote> <blockquote>
<pre><code>foo <pre><code>foo
</code></pre> </code></pre>
</blockquote> </blockquote>
跳转至第 2884 行的变更 跳转至第 2907 行的变更
foo foo
``` ```
. .
<blockquote> <blockquote>
<pre><code></code></pre> <pre><code></code></pre>
</blockquote> </blockquote>
<p>foo</p> <p>foo</p>
<pre><code></code></pre> <pre><code></code></pre>
. .
注意,在以下情况下,我们有一个段落
延续行。
.
> foo
- bar
.
<blockquote>
<p>foo
- bar</p>
</blockquote>
.
为了理解原因,请注意:在
```markdown
> foo
> - bar
```
`- bar` 缩进太深,无法开始列表,且不能
作为缩进代码块,因为缩进代码块不能
中断段落,所以它是一个 [段落延续行]。
引用块可以为空 引用块可以为空
. .
> >
. .
<blockquote> <blockquote>
</blockquote> </blockquote>
. .
. .
跳转至第 3581 行的变更 跳转至第 3628 行的变更
<pre><code>bar <pre><code>bar
</code></pre> </code></pre>
</li> </li>
<li> <li>
<pre><code>baz <pre><code>baz
</code></pre> </code></pre>
</li> </li>
</ul> </ul>
. .
列表项最多可以以一个空行开始。
在以下示例中,`foo` 不是列表项的一部分。
item
.
-
foo
.
<ul>
<li></li>
</ul>
<p>foo</p>
.
这是一个空的无序列表项 这是一个空的无序列表项
. .
- foo - foo
- -
- bar - bar
. .
<ul> <ul>
<li>foo</li> <li>foo</li>
<li></li> <li></li>
跳转至第 4814 行的变更 跳转至第 4876 行的变更
``` ```
. .
<pre><code class="language-foo+bar">foo <pre><code class="language-foo+bar">foo
</code></pre> </code></pre>
. .
## 实体 ## 实体
为了使本标准尽可能与 HTML 无关,所有 为了使本标准尽可能与 HTML 无关,所有
有效的 HTML 实体(代码块和代码 span 除外) 有效的 HTML 实体(代码块和代码 span 除外)
在存储到 AST 之前,都会被识别并转换为 unicode 字符。 在存储到 AST 之前,都会被识别并转换为 Unicode 字符。
这意味着渲染到非 HTML 格式的渲染器不需要感知 HTML 实体。 这意味着渲染到非 HTML 格式的渲染器不需要感知 HTML 实体。
HTML 渲染器可以选择将 HTML 渲染器可以选择将
unicode 字符转义为实体,或保持原样。(但是, Unicode 字符转义为实体,或保持原样。(但是,
`"`, `&`, `<` 和 `>` 必须始终作为实体渲染。) `"`, `&`, `<` 和 `>` 必须始终作为实体渲染。)
[命名实体](@name-entities) 由 `&` [命名实体](@name-entities) 由 `&` + 任何有效的 HTML5 实体名称 + `;` 组成。
+ 任何有效的 HTML5 实体名称 + `;`。该 [以下文档](https://html.whatwg.cn/multipage/entities.json)
被用作有效实体名称及其对应码位的权威来源。 被用作有效实体名称及其对应码位的权威来源。
对应码位。 对应代码 位。
. .
&nbsp; &amp; &copy; &AElig; &Dcaron; &nbsp; &amp; &copy; &AElig; &Dcaron;
&frac34; &HilbertSpace; &DifferentialD; &frac34; &HilbertSpace; &DifferentialD;
&ClockwiseContourIntegral; &ngE; &ClockwiseContourIntegral; &ngE;
. .
<p>  &amp; © Æ Ď <p>  &amp; © Æ Ď
¾ ℋ ⅆ ¾ ℋ ⅆ
∲ ≧̸</p> ∲ ≧̸</p>
. .
[十进制实体](@decimal-entities) [十进制实体](@decimal-entities)
由 `&#` + 1-8 个阿拉伯数字字符串 + `;` 组成。同样,这些 由 `&#` + 1-8 个阿拉伯数字字符串 + `;` 组成。同样,这些
实体需要被识别并转换为其对应的 实体需要被识别并转换为其对应的
unicode 码位。 无效的 unicode 码位 将被替换为 Unicode 码位。 无效的 Unicode 码位 将被替换为
“未知 码位” 字符(`U+FFFD`)。出于安全原因, “未知 码位” 字符(`U+FFFD`)。出于安全原因,
码位 `U+0000` 也将被替换为 `U+FFFD`。 码位 `U+0000` 也将被替换为 `U+FFFD`。
. .
&#35; &#1234; &#992; &#98765432; &#0; &#35; &#1234; &#992; &#98765432; &#0;
. .
<p># Ӓ Ϡ </p> <p># Ӓ Ϡ </p>
. .
[十六进制实体](@hexadecimal-entities) [十六进制实体](@hexadecimal-entities) 由 `&#` + `X` 或 `x`
+ 1-8 个十六进制数字字符串 + `;` 组成。它们也 会被解析并转换为 AST 中对应的
Unicode 码位。 会被解析并转换为 AST 中对应的 Unicode 码位
unicode 码位 AST。
. .
&#X22; &#XD06; &#xcab; &#X22; &#XD06; &#xcab;
. .
<p>&quot; ആ ಫ</p> <p>&quot; ആ ಫ</p>
. .
这里是一些非实体引用 这里是一些非实体引用
. .
跳转至第 5144 行的变更 跳转至第 5206 行的变更
下面给出的规则涵盖了所有这些模式,同时允许 下面给出的规则涵盖了所有这些模式,同时允许
使用不需要回溯的高效解析策略。 使用不需要回溯的高效解析策略。
首先,是一些定义。[分隔符序列](@delimiter-run)(delimiter run)是指 首先,是一些定义。[分隔符序列](@delimiter-run)(delimiter run)是指
一个或多个 `*` 字符组成的序列,且其前后没有 一个或多个 `*` 字符组成的序列,且其前后没有
`*` 字符,或者一个或多个 `_` `*` 字符,或者一个或多个 `_`
字符组成的序列,且其前后没有 `_` 字符。 字符组成的序列,且其前后没有 `_` 字符。
一个 [左侧分隔符运行](@left-flanking-delimiter-run) 是 一个 [左侧分隔符运行](@left-flanking-delimiter-run) 是
一个 [分隔符运行],其 (a) 后面没有 [unicode 空白], 一个 [分隔符运行],其 (a) 后面没有 [Unicode 空白],
并且 (b) 要么后面没有 [标点字符],或者 并且 (b) 要么后面没有 [标点字符],或者
前面有 [unicode 空白] 或 [标点字符]。 前面有 [Unicode 空白] 或 [标点字符]。
就此定义而言,行的开头和结尾 就此定义而言,行的开头和结尾
计作 unicode 空白。 计作 Unicode 空白。
一个 [右侧分隔符运行](@right-flanking-delimiter-run) 是 一个 [右侧分隔符运行](@right-flanking-delimiter-run) 是
一个 [分隔符运行],其 (a) 前面没有 [unicode 空白], 一个 [分隔符运行],其 (a) 前面没有 [Unicode 空白],
并且 (b) 要么前面没有 [标点字符],或者 并且 (b) 要么前面没有 [标点字符],或者
后面有 [unicode 空白] 或 [标点字符]。 后面有 [Unicode 空白] 或 [标点字符]。
就此定义而言,行的开头和结尾 就此定义而言,行的开头和结尾
计作 unicode 空白。 计作 Unicode 空白。
以下是一些定界符序列的示例。 以下是一些定界符序列的示例。
- 左侧分隔但非右侧分隔 - 左侧分隔但非右侧分隔
``` ```
***abc ***abc
_abc _abc
**"abc" **"abc"
_"abc" _"abc"
跳转至第 6468 行的变更 跳转至第 6530 行的变更
just a backslash just a backslash
. .
[link](foo\bar) [link](foo\bar)
. .
<p><a href="foo%5Cbar">link</a></p> <p><a href="foo%5Cbar">link</a></p>
. .
URL 转义在目的地内部应保持原样,因为所有 URL 转义在目的地内部应保持原样,因为所有
URL 转义字符也是有效的 URL 字符。目的地中的 HTML 实体 URL 转义字符也是有效的 URL 字符。目的地中的 HTML 实体
将被解析为对应的 unicode 将被解析为对应的 Unicode
码位,照常处理,并在写入 HTML 时选择性地进行 URL 转义。 码位,照常处理,并在写入 HTML 时选择性地进行 URL 转义。
. .
[link](foo%20b&auml;) [link](foo%20b&auml;)
. .
<p><a href="foo%20b%C3%A4">link</a></p> <p><a href="foo%20b%C3%A4">link</a></p>
. .
注意,由于标题通常可以被解析为目的地, 注意,由于标题通常可以被解析为目的地,
如果你尝试省略目的地而保留标题,你会 如果你尝试省略目的地而保留标题,你会
得到意想不到的结果。 得到意想不到的结果。
跳转至第 6678 行的变更 跳转至第 6740 行的变更
一个 [链接标签](@link-label) 以左方括号(`[`)开始, 一个 [链接标签](@link-label) 以左方括号(`[`)开始,
并以第一个未被反斜杠转义的右方括号(`]`)结束。 并以第一个未被反斜杠转义的右方括号(`]`)结束。
在这些方括号之间必须至少有一个 [非空白字符]。 在这些方括号之间必须至少有一个 [非空白字符]。
未转义的方括号字符在 [链接标签] 中是不允许的。 未转义的方括号字符在 [链接标签] 中是不允许的。
一个链接标签在方括号内最多可以有 999 个字符。 一个链接标签在方括号内最多可以有 999 个字符。
characters inside the square brackets. characters inside the square brackets.
当且仅当一个标签的归一化形式相等时,它才 [匹配](@matches) 当且仅当一个标签的归一化形式相等时,它才 [匹配](@matches)
另一个。要归一化一个标签,执行 *unicode 大小写折叠* 并将连续的内部 另一个。要归一化一个标签,执行 *unicode 大小写折叠* 并将连续的内部
另一个。要归一化一个标签,执行 *Unicode 大小写折叠* 并将连续的内部 [空白] 折叠为单个空格。如果存在多个
匹配的引用链接定义,则使用文档中首先出现的那个。 匹配的引用链接定义,则使用文档中首先出现的那个。
(在这种情况下,发出警告是可取的。) (在这种情况下,发出警告是可取的。)
第一个链接标签的内容被解析为行内内容, 第一个链接标签的内容被解析为行内内容,
并用作链接的文本。链接的 URI 和标题由 并用作链接的文本。链接的 URI 和标题由
匹配的 [链接引用定义] 提供。 匹配的 [链接引用定义] 提供。
matching [link reference definition]. matching [link reference definition].
这是一个简单的例子 这是一个简单的例子
 变更结束。共 35 个变更块。 
47 行被更改或删除 109 行被更改或添加

此 HTML 差异由 rfcdiff 1.41 生成。最新版本可从 http://tools.ietf.org/tools/rfcdiff/ 获取