预热

1. 字符和行(character&line)

字符(characters) 的任何排列都是有效的 CommonMark 文档。

character 是一个 Unicode 代码点。 尽管某些代码点(例如,组合重音符号)在直观意义上与字符不对应,但是出于本规范的目的,所有代码点都计为字符。

此规范未指定编码; 它认为行由 characters 而不是字节组成。符合的解析器可以限于某种编码。

行(line) 是除换行符之外的零个或多个 characters 的排列(U+000A)或回车(U+000D),然后是 line ending 或文件末尾。

行尾(line ending) 即换行符(U+000A),后面没有换行符的回车符(U+000D),或者是一个回车紧跟一个换行。

不包含字符的行或仅包含空格(U+0020)或制表符(U+0009)的行称为 空行(blank line)

本规范将使用以下字符类定义: 空白字符(whitespace character) 是一个空格(U+0020),制表符 (U+0009),换行符(U+000A),行列表(U+000B),换页(U+000C)或回车(U+000D)。

空格(Whitespace)是一个或多个 whitespace characters 的排列。

Unicode 空格字符(whitespace character) 是 Unicode Zs 常规类别中的任何代码点,或者是一个 tab (U+0009), 回车(U+000D), 换行(U+000A), 或者换页(U+000C)。

Unicode 空格(whitespace) 是一个或多个 Unicode whitespace characters 的排列。

一个 空格(space)U+0020

一个 非空格字符(non-whitespace character) 是任意的不是 whitespace character 的字符。

一个 ASCII 标点符号(punctuation character)!, ", #, $, %, &, ', (, ),*, +, ,, -, ., / (U+0021–2F), :, ;, <, =, >, ?, @ (U+003A–0040), [, \, ], ^, _, ` (U+005B–0060), {, |, }, 或 ~ (U+007B–007E)。

一个 标点符号(punctuation character) 是一个 ASCII punctuation character 或者任意的在普通 Unicode 范畴的 PcPdPePfPiPo, 或 Ps

2. Tabs

行中的 tab 不会扩展为空格。但是,在空格有助于定义块结构的上下文中,tab 的行为就像它们被带有 4 个字符的 tab 空格所替换。

因此,打个比方,可以在缩进代码块中使用 tab 而不是四个空格。(但请注意,内部 tab 作为文字 tab 传递,而不会扩展为空格。)

示例 1

Markdown HTML 效果
→foo→baz→→bim

<pre><code>foo→baz→→bim
</code></pre>

示例 2

Markdown HTML 效果
  →foo→baz→→bim

<pre><code>foo→baz→→bim
</code></pre>

示例 3

Markdown HTML 效果
    a→a
    ὐ→a

<pre><code>a→a
ὐ→a
</code></pre>

在下面的示例中,列表项的延续段落使用 tab 缩进; 这与四个空格的缩进具有完全相同的效果:

示例 4

Markdown HTML 效果
  - foo

→bar

<ul>
<li>
<p>foo</p>
<p>bar</p>
</li>
</ul>

示例 5

Markdown HTML 效果
- foo

→→bar

<ul>
<li>
<p>foo</p>
<pre><code>  bar
</code></pre>
</li>
</ul>

通常,开始块引用的 > 可以选择性地跟随空格,该空格不被视为内容的一部分。在下面的例子中,> 后跟一个 tab,它被视为扩展为三个空格。 由于其中一个空格被认为是分隔符的一部分,因此 foo 被认为是在块引用上下文中缩进了六个空格,因此我们得到一个以两个空格开头的缩进代码块。

示例 6

Markdown HTML 效果
>→→foo

<blockquote>
<pre><code>  foo
</code></pre>
</blockquote>

示例 7

Markdown HTML 效果
-→→foo

<ul>
<li>
<pre><code>  foo
</code></pre>
</li>
</ul>

示例 8

Markdown HTML 效果
    foo
→bar

<pre><code>foo
bar
</code></pre>

示例 9

Markdown HTML 效果
 - foo
   - bar
→ - baz

<ul>
<li>foo
<ul>
<li>bar
<ul>
<li>baz</li>
</ul>
</li>
</ul>
</li>
</ul>

示例 10

Markdown HTML 效果
#→Foo

<h1>Foo</h1>

示例 11

Markdown HTML 效果
*→*→*→

<hr />

3. 不安全的字符

出于安全原因,Unicode 字符 U+0000 必须替换为 REPLACEMENT CHARACTER (U+FFFD)。