Markdown表格语法原则
摘要
- Markdown Table 的组成以是否有标题列和分隔列做为判定,数据列的有无不影响其判定。
- 表格的字段数以标题列的字段数作为基准,有少则补。有多的,PHP是直接判断为文字,GFM则是隐藏。
- 分隔列每栏至少要有三个-(dash),可在-的最左最右插入:指定文字对齐方式,:也算在最少三个-的数量里。
- 字段以|(pipe)划分,表格外侧可有可无,但若只有单一字段,则每栏至少要有一个|。
- 字段里,文字与|之间的空白符号对程序来说无意义,但对于编写者能加强可读性。
基本构成
标准的Markdown表格应该长得像是这样:
Age | Time | Food | Gold | Requirement
--------------|:-----:|-----:| ----:|------------------------
Feudal Age | 02:10 | 500 | 0 | Dark Age building x 2
Castle Age | 02:40 | 800 | 200 | Feudal Age building x 2
Imperial Age | 03:30 | 1000 | 800 | Castle Age building x 2
显示结果如下:
Age | Time | Food | Gold | Requirement |
---|---|---|---|---|
Feudal Age | 02:10 | 500 | 0 | Dark Age building x 2 |
Castle Age | 02:40 | 800 | 200 | Feudal Age building x 2 |
Imperial Age | 03:30 | 1000 | 800 | Castle Age building x 2 |
其组成元素有三:标题列、分隔列、数据列。
- 第一列为标题列
- 第二列为分隔列
- 第三列与之后都是数据列
Age | Time | Food | Gold <--标题列(必要)
--------------|-------|------|------ <--分隔列(必要)
Feudal Age | 02:10 | 500 | 0 <--数据列(选填)
Castle Age | 02:40 | 800 | 200
Imperial Age | 03:30 | 1000 | 800
标题列和分隔列是必要存在,可以没有数据列,但若没有标题和分隔列,则不会被视为一个Makrdown表格
字段数量
字段数量由标题列的字段数决定的。标题列有几栏,数据列就会显示几栏,少的补空,有多的,PHP是直接判断为文字,GFM则是隐藏。
State | Age | Time | Food
------- | --------------|-------|------|------|------------------------
More | Feudal Age | 02:10 | 500 | 0 | Dark Age building x 2
Conform | Castle Age | 02:40 | 800
Less | Imperial Age |
State | Age | Time | Food
------- | --------------|-------|------|------|------------------------
More | Feudal Age | 02:10 | 500 | 0 | Dark Age building x 2
Conform | Castle Age | 02:40 | 800
Less | Imperial Age |
水平分隔列
分隔线列中,每栏的水平分隔符号数量至少要有3个,3个以上无论多寡皆不影响。
正确
Age | Time | Food | Gold | Requirement
------------ | ---- | --- | --- | ---
错误
Age | Time | Food | Gold | Requirement
------- -------|-------|--- | --- | --
第一栏被空白中断 第五栏少于三个
文字对齐
预设的文字对齐方式是标题列置中,数据列靠左。若要改变对其方式可以在分隔列的各字段插入:作为文字位置的指示符号。在分隔符号-最左插入:就是靠左,若是在最右插入就是靠右,若两边都有就是置中,并且会一并套用在标题列和数据列。
Default | Left | Center | Right
-----------| :--------- | :--------: | ---------:
x | x | x | x
xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx
Default | Left | Center | Right |
---|---|---|---|
x | x | x | x |
xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx |
另外:是可以算进分隔符号最低数量要求的,像是下面的语法是可以正确显示的:
Default | Left | Center | Right
--- | :-- | :-: | --:
x | x | x | x
xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx
Default | Left | Center | Right |
---|---|---|---|
x | x | x | x |
xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx |
垂直分隔符号
在Markdown里,是以|作为垂直分隔符号来区分字段,主要是需要放置在两栏之间,至于外侧的垂直分隔符号可放可不放,但若只有一栏,则每列至少一定要有一个垂直分隔符号。
空白不影响排版
使用空白排版Markdown表格的好处是让编写者好懂,但对于程序来说有没有空白都不影响程序的判读。
总结
有了这些语法的认知,就可以开始着手写转换工具了。比较麻烦的部分大概是在垂直分隔符号的弹性导致判读字段需要多花点心思吧。
个人比较喜欢的排版方式大致是外侧无垂直分隔符号,垂直分隔符号与文字中间至少隔一个空白,并且排版成每列字段等宽。比较细节的部分大概就是会将文字靠左,数字与时间靠右。
整体来说也就是本文最上面语法展示那样。所以可能比较难在现成的套件库里找到完全符合我的需求,这也就是我为什么打算自己手刻的原因啰。
最后希望这篇文章能帮助读者对于Markdown Table语法细节的认知。