Markdown学习笔记(7)- 内联文本块(1)

Markdown学习笔记(7)- 内联文本块(1)


本章目标

上一篇文章里,我们已经全面地了解了Markdown容器文本块的标记。我们将用两篇文章讨论Markdown中一些内联结构的写法。


1. 内联解析顺序

Markdown文本的内联解析的顺序是从左到右的,即从字符流的开始到结尾,顺序进行分析。因此,下面的例子:

`hi`lo`

效果是这样的:hilo`

在这里,hi被解析为代码文本。


2. 转义

Markdown的转义符号是\,和主流编程语言不同的是,这个符号可以被加在任何ASCII符号文本的前面,代表一种转义。如果\被加在非Markdown特殊符号的前面,效果和没加\这个符号是一致的。

例子:

\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~

效果:
!"#$%&'()*+,-./:;<=>?@[]^_`{|}~

在上述例子外的其他字符前加\,只表示一个\。你也可以在一行的行尾加\来表示换行:

foo\
bar

效果:
foo

bar

不过,反斜杠转义在代码块、自动链接或原始HTML这些文本中不起作用。


3. 实体和数符引用

实体引用由&符号机上任何有效的HTML5实体名称再加;符号组成。这个文档里定义了这些实体。

Markdown支持直接在文本中写这些实体引用,效果会正像你期待的一样被显示出来。
只要实体引用的位置不在URL、链接、标题和围栏代码块中,这些实体就可以发挥作用。

Markdown还有把一些8进制或者16进制数字转换成对应的Unicode码点字符的功能。对于8进制数字,可以这么使用:&#数字;。对于16进制数字,可以这么使用:&#X数字;。X也可以小写。

例子:&#XD06;
效果:ആ


4. 内联代码块

内联代码块是指一行内,一个字符串前后都有一个或多个`标识。这个字符串的内容就被视为内联代码块。在内联代码块里,换行符将会被视为空格。内联代码块里的转义符号是无效的。

一个内联代码块里可以用多个`标识开始,也可以用多个反引号结束,但开始和结束所用的符号数量必须是相同的。

例子:``abc``
效果:abc


5. 强调和斜体

John Gruber在Markdown语法描述中提到:Markdown将星号*和下划线_作为重点指标。如果Markdown文本前后出现一个*_,这段文本将会被HTML的<em>标签包装 ;如果Markdown文本前后出现两个*_, 这段文本将会被HTML的<strong>标签包装。

这里有几点需要注意:
1. 开头的*或者_符号后面的第一个字符不能为空格。
2. 当开头的*或者_符号前有字母/数字,后有符号的时候,这段文本不被视为强调或者斜体。
3. 强调或者斜体标记符包括的文本可以包括空白,但多个连续的空白只将会被视为一个。
4. 开头和结尾的标记必须一致。
5. 关闭标识前一个字符不得为空格。
6. 强调和斜体符号不能嵌套。

CommonMark对于强调和斜体上规定了很多很严格而且繁琐的规则,以致于CommonMark.NET和CommonMark.js都没有很严格的支持这些内容。因此我们建议大家可以在这里忽略CommonMark的规则。


6. 链接概述

在markdown中,链接是一个复杂的话题,因为它有许多种类。因此我们按照类型把它分为内联链接、完整参考链接、折叠参考链接、快速参考链接和自动链接五个部分进行讨论。

链接包含链接文本(可见的文本),链接目标 (链接目标的URL)以及可选的链接标题。Markdown中有两种基本类型的链接。一种通过内嵌的方式在链接文本后立即给出URL;另一种是参考链接,其链接目标和链接标题在文档的其他地方定义。

链接文本内容由[]包括起来,链接文本有几个要求:
1. 链接文本不能包含其他链接,在任何层次上的嵌套。如果多个有效的链接定义相互嵌套,则使用最内层的定义。
2. 内联代码,自动链接和HTML标签的解释优先级高于链接文本。
3. 链接文本解释上的优先级高于强调和斜体标记。

链接目标有几个要求:
1. 链接目标可以是<>符号之间的一系列(0个或者多个字符)的非空白字符(字符也不能包含换行符或者<>)。
2. 链接目标也可以是一个非空字符序列(不能包含空白或者ASCII控制字符或者括号)。括号只能出现在转义字符\后面。

链接标题有几个要求:
1. 标题内容可以用'或者"包括起来。
2. 标题内容文本可以包括多行内容,但中间不能有空行。


7. 内联链接

内联的链接由刚才我们说的链接文本开头,后面需要紧跟着一个左小括号'('(也就是说它们之间不允许有空格),小括号后面有可选的空白,空白后面需要接链接目标(也就是URL,其中不得包含空白。链接目标文本也是可选的),再接一个由空白使其与链接目标分开的、被双引号包括起来的链接标题(可选),再接一个可选的空白,最后是一个右小括号')'。

7.1 阻止转义标记

如果链接文本(URL)被<>包括起来,那么文本中的反斜杠符号是有效的,<>里的所有文本都将不会被转义(所以如果你不想要链接文本中的某些括号被当作内联链接中的一部分被匹配,你可以使用<>把URL内容包括起来)。

7.2 链接标题的不同写法

链接标题可以被上述的双引号包括起来,还可以被单引号和括号包括起来,那仍是合法的标题。

例子:[link](www.baidu.com (title text))
效果:[link](www.baidu.com (title text))

当你的鼠标指针移至link上的时候,你会看到title text,这就是链接标题。

7.3 链接目标文本的限制

对于一个链接目标文本,它可以被当作是URL的一部分的小括号而存在,前提是文本里的小括号必须是成对的——通俗一点说,就是有几个(,URL里就要有几个)(对应。否则URL将被小括号截断匹配。如果你想要填写的URL确实含有不成对的小括号,建议你使用<>。另外,链接文本也不能嵌套使用。

7.4 链接文本中可以包含样式

在最前面的,被[]包括起来的部分里,可以加入Markdown样式。

例子:[**A**_B_](www.zhihu.com)
效果:AB

可以看到,A变成了粗体而B变成了斜体。


Have A Break

至此,我们只剩下Markdown中的三种参考式链接、自动链接、插入图片、原始HTML内容、硬软换行和一些简单的内容和规范没有梳理了。如果你从Markdown Tutorial的第一部分看到这里,你几乎已经是半个手拿CommonMark法典的语言律师了!恭喜你,同时,这也意味着很快我们对Markdown语法各种细节和规定的讨论也要到尾声了。很快我们就会补全Markdown拼图的最后一块了,敬请期待吧。

稍作休息,我们在下篇文章再见。

原文链接:,转发请注明来源!

发表评论

要发表评论,您必须先登录