spec.txt   spec.txt 
--- ---
标题: CommonMark 规范 标题: CommonMark 规范
作者 作者
- John MacFarlane - John MacFarlane
版本: 0.14 版本: 0.15
日期: 2014-12-10 日期: 2014-12-31
许可: '[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 年开发,他编写了
跳至更改处 第 4440 行 跳至更改处 第 4440 行
``` ```
下面给出的规则涵盖了所有这些模式,同时允许 下面给出的规则涵盖了所有这些模式,同时允许
使用不需要回溯的高效解析策略。 使用不需要回溯的高效解析策略。
首先,是一些定义。[分隔符序列](@delimiter-run)(delimiter run)是指 首先,是一些定义。[分隔符序列](@delimiter-run)(delimiter run)是指
一个或多个 `*` 字符组成的序列,且其前后没有 一个或多个 `*` 字符组成的序列,且其前后没有
`*` 字符,或者一个或多个 `_` `*` 字符,或者一个或多个 `_`
字符组成的序列,且其前后没有 `_` 字符。 字符组成的序列,且其前后没有 `_` 字符。
[左侧分隔符序列](@right-facing-delimiter-run)是 [左侧分隔符序列](@left-flanking-delimiter-run)是
一种 [分隔符序列](#delimiter-run),它 (a) 后跟的不是 [Unicode 一种 [分隔符序列](#delimiter-run),它 (a) 后跟的不是 [Unicode
空白字符](#unicode-whitespace),并且 (b) 后跟的不是 空白字符](#unicode-whitespace),并且 (b) 后跟的不是
[标点符号](#punctuation-character),或者 [标点符号](#punctuation-character),或者
前置的是 [Unicode 空白字符](#unicode-whitespace) 或 前置的是 [Unicode 空白字符](#unicode-whitespace) 或
一个 [标点符号](#punctuation-character)。 一个 [标点符号](#punctuation-character)。
[右侧分隔符序列](@left-facing-delimiter-run)是 [右侧分隔符序列](@right-flanking-delimiter-run)是
一种 [分隔符序列](#delimiter-run),它 (a) 前置的不是 [Unicode 一种 [分隔符序列](#delimiter-run),它 (a) 前置的不是 [Unicode
空白字符](#unicode-whitespace),并且 (b) 前置的不是 空白字符](#unicode-whitespace),并且 (b) 前置的不是
[标点符号](#punctuation-character),或者 [标点符号](#punctuation-character),或者
后跟的是 [Unicode 空白字符](#unicode-whitespace) 或 后跟的是 [Unicode 空白字符](#unicode-whitespace) 或
一个 [标点符号](#punctuation-character)。 一个 [标点符号](#punctuation-character)。
以下是一些定界符序列的示例。 以下是一些定界符序列的示例。
- 左侧分隔但非右侧分隔 - 左侧分隔但非右侧分隔
跳至更改处 第 4500 行 跳至更改处 第 4500 行
之后来自 Roopesh Chander 的 之后来自 Roopesh Chander 的
[vfmd](http://www.vfmd.org/vfmd-spec/specification/#procedure-for-identifying-em phasis-tags)。 [vfmd](http://www.vfmd.org/vfmd-spec/specification/#procedure-for-identifying-em phasis-tags)。
vfmd 使用术语“强调指示字符串”而不是“分隔符 vfmd 使用术语“强调指示字符串”而不是“分隔符
序列”,并且其区分左侧和右侧分隔序列的规则 序列”,并且其区分左侧和右侧分隔序列的规则
比此处给出的规则要复杂一些。) 比此处给出的规则要复杂一些。)
以下规则定义了强调和强强调。 以下规则定义了强调和强强调。
1. 单个 `*` 字符 [可以开启强调](@can-open-emphasis) 1. 单个 `*` 字符 [可以开启强调](@can-open-emphasis)
当且仅当它是 当且仅当它是
[左侧分隔符序列](#right-facing-delimiter-run)的一部分。 [左侧分隔符序列](#left-flanking-delimiter-run)的一部分。
2. 单个 `_` 字符 [可以开启强调](#can-open-emphasis) 当且仅当 2. 单个 `_` 字符 [可以开启强调](#can-open-emphasis) 当且仅当
它是 它是
[左侧分隔符序列](#right-facing-delimiter-run)的一部分 [左侧分隔符序列](#left-flanking-delimiter-run)的一部分
且其前面不是 ASCII 字母数字字符。 且其前面不是 ASCII 字母数字字符。
3. 单个 `*` 字符 [可以关闭强调](@can-close-emphasis) 3. 单个 `*` 字符 [可以关闭强调](@can-close-emphasis)
当且仅当它是 当且仅当它是
[左侧分隔符序列](#right-facing-delimiter-run)的一部分。 [右侧分隔符序列](#right-flanking-delimiter-run)的一部分。
4. 单个 `_` 字符 [可以关闭强调](#can-close-emphasis) 4. 单个 `_` 字符 [可以关闭强调](#can-close-emphasis)
当且仅当它是 当且仅当它是
[左侧分隔符序列](#right-facing-delimiter-run)的一部分。 [右侧分隔符序列](#right-flanking-delimiter-run)的一部分。
且其后面不是 ASCII 字母数字字符。 且其后面不是 ASCII 字母数字字符。
5. 双 `**` [可以开启强强调](@can-open-strong-emphasis) 5. 双 `**` [可以开启强强调](@can-open-strong-emphasis)
当且仅当它是 当且仅当它是
[左侧分隔符序列](#right-facing-delimiter-run)的一部分。 [左侧分隔符序列](#left-flanking-delimiter-run)的一部分。
6. 双 `__` [可以开启强强调](#can-open-strong-emphasis) 6. 双 `__` [可以开启强强调](#can-open-strong-emphasis)
当且仅当它是 当且仅当它是
[左侧分隔符序列](#right-facing-delimiter-run)的一部分 [左侧分隔符序列](#left-flanking-delimiter-run)的一部分
且其前面不是 ASCII 字母数字字符。 且其前面不是 ASCII 字母数字字符。
7. 双 `**` [可以关闭强强调](@can-close-strong-emphasis) 7. 双 `**` [可以关闭强强调](@can-close-strong-emphasis)
当且仅当它是 当且仅当它是
[右侧分隔符序列](#right-facing-delimiter-run)的一部分。 [右侧分隔符序列](#right-flanking-delimiter-run)的一部分。
8. 双 `__` [可以关闭强强调](#can-close-strong-emphasis) 8. 双 `__` [可以关闭强强调](#can-close-strong-emphasis)
当且仅当它是 当且仅当它是
[右侧分隔符序列](#right-facing-delimiter-run)的一部分。 [右侧分隔符序列](#right-flanking-delimiter-run)的一部分。
且其后面不是 ASCII 字母数字字符。 且其后面不是 ASCII 字母数字字符。
9. 强调以一个 [可以开启 9. 强调以一个 [可以开启
强调](#can-open-emphasis) 的分隔符开始,并以一个 [可以关闭 强调](#can-open-emphasis) 的分隔符开始,并以一个 [可以关闭
强调](#can-close-emphasis) 的分隔符结束,且二者使用相同的 强调](#can-close-emphasis) 的分隔符结束,且二者使用相同的
字符(`_` 或 `*`)作为起始分隔符。起始分隔符和 字符(`_` 或 `*`)作为起始分隔符。起始分隔符和
结束分隔符之间必须有一个非空的内联序列;这些形成了强调 结束分隔符之间必须有一个非空的内联序列;这些形成了强调
内联的内容。 内联的内容。
内联。 内联。
跳至更改处 第 4601 行 跳至更改处 第 4601 行
规则 1 规则 1
. .
*foo bar* *foo bar*
. .
<p><em>foo bar</em></p> <p><em>foo bar</em></p>
. .
这不是强调,因为起始的 `*` 后跟的是 这不是强调,因为起始的 `*` 后跟的是
空白字符,因此不是 [左侧分隔符 空白字符,因此不是 [左侧分隔符
序列](#right-facing-delimiter-run) 的一部分 序列](#left-flanking-delimiter-run) 的一部分
. .
a * foo bar* a * foo bar*
. .
<p>a * foo bar*</p> <p>a * foo bar*</p>
. .
这不是强调,因为起始的 `*` 前面是 这不是强调,因为起始的 `*` 前面是
字母数字,后面是标点符号,因此 字母数字,后面是标点符号,因此
不是 [左侧分隔符序列](#right-facing-delimiter-run) 的一部分 不是 [左侧分隔符序列](#left-flanking-delimiter-run) 的一部分
. .
a*"foo"* a*"foo"*
. .
<p>a*&quot;foo&quot;*</p> <p>a*&quot;foo&quot;*</p>
. .
Unicode 不换行空格也计为空白字符。 Unicode 不换行空格也计为空白字符。
. .
跳至更改处 第 4712 行 跳至更改处 第 4712 行
. .
*foo bar * *foo bar *
. .
<p>*foo bar *</p> <p>*foo bar *</p>
. .
这不是强调,因为第二个 `*` 这不是强调,因为第二个 `*`
前面是标点符号,后面是字母数字 前面是标点符号,后面是字母数字
(因此它不是 [右侧分隔符 (因此它不是 [右侧分隔符
序列](#left-facing-delimiter-run) 的一部分) 序列](#right-flanking-delimiter-run) 的一部分)
. .
*(*foo) *(*foo)
. .
<p>*(*foo)</p> <p>*(*foo)</p>
. .
这一限制的意义更容易通过 这一限制的意义更容易通过
这个例子来理解 这个例子来理解
跳至更改处 第 4804 行 跳至更改处 第 4804 行
后跟空白字符 后跟空白字符
. .
** foo bar** ** foo bar**
. .
<p>** foo bar**</p> <p>** foo bar**</p>
. .
这不是强强调,因为起始的 `**` 前面是 这不是强强调,因为起始的 `**` 前面是
字母数字,后面是标点符号,因此 字母数字,后面是标点符号,因此
不是 [左侧分隔符序列](#right-facing-delimiter-run) 的一部分 不是 [左侧分隔符序列](#left-flanking-delimiter-run) 的一部分
. .
a**"foo"** a**"foo"**
. .
<p>a**&quot;foo&quot;**</p> <p>a**&quot;foo&quot;**</p>
. .
词内强强调使用 `**` 是允许的 词内强强调使用 `**` 是允许的
. .
 更改结束。15 个更改块。 
16 行已更改或删除 16 行已更改或添加

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