2 预备知识

2.1 字符和行

任何字符序列都是有效的CommonMark文档。

字符是一个Unicode码点。虽然有些代码点(例如控制字符)在直观上并不对应于字符,但在本规范中,所有代码点都算作字符。

该规范没有指定编码;它认为行是由字符而不是字节组成的。符合标准的解析器可能仅限于某种编码。

行是除换行符(U+000A)或回车符(U+000D)以外的零个或多个字符的序列,后面跟着行结束或文件结尾。

行结束是换行符(U+000A),或者回车符(U+000D)后面有换行符。

不包含字符的行,或只包含空格(U+0020)或制表符(U+0009)的行称为空行。

以下字符类的定义将在本规范中使用:

  • 空白字符是空格(U+0020)、制表符(U+0009)、换行符(U+000A)、行制表符(U+000B)、换行符(U+000C)或回车符(U+000D)。

  • 空白是一个或多个空白字符的序列。

  • Unicode Zs的一般类别中的任一码点都是一个空白字符,或者是制表符(U+0009)、回车符(U+000D)、换行符(U+000A)或换行符(U+000C)。

  • U+0020是一个空格。

  • 除空白字符外的所有字符均是非空白字符。

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

  • 标点符号是ASCII标点符号或一般Unicode类别Pc、Pd、Pe、Pf、Pi、Po或Ps中的任一一个。

2.2 制表符(tabs)

行中的制表符不会展开为空格。但在空白符有助于定义块结构的情况下,制表符的行为类似于四个空格。

因此,可以使用制表符代替缩进代码块中的四个空格。(不过请注意,内部制表符是作为制表符这样一个字符传递的,而不是展开为空格。)

示例详见原文2.2章节

2.3 不安全的字符

出于安全考虑,Unicode字符U+0000必须用替换字符(U+FFFD)替换。