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
)替换。