在编辑器输入这样的语句 [图片] 出来后确实这样的,序号没有继续排列 [图片]

Markdown 编辑器 bug ?

在编辑器输入这样的语句

image.png

出来后确实这样的,序号没有继续排列

image.png

  • Markdown

    Markdown 是一种可以使用普通文本编辑器编写的标记语言,通过类似 HTML 的标记语法,它可以使普通文本内容具有一定的格式,具体语法请参考 Markdown 教程

    94 引用 • 623 回帖 • 621 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    1376 引用 • 9027 回帖 • 574 关注
被采纳的回答
  • 88250 2

    终于碰到属于我专业领域的问题了。...

    先能用就行

    Markdown 文本:

    1. 第一个列表项
       ```
       围栏代码块标记 ` 符号要和列表项的第一个非空字符(第字)对齐
       ```
    2. 继续第二个列表项
    

    将渲染为:

    1. 第一个列表项
      围栏代码块标记 ` 符号要和列表项的第一个非空字符(第字)对齐
      
    2. 继续第二个列表项

    再刨根问底

    这涉及到 Markdown 语法规范(CommonMark)中列表项和围栏代码块的解析。

    首先明确一点:Markdown 会被解析为一颗树,其中列表项是一种块级容器(block container)节点,它可以包含其他的块级(block-level)元素节点。接下来我们了解一下列表项的构成:

    • 开头缩进(本例中缩进为 0,子列表或者放到块引用中才会有缩进)
    • 列表标记:无序列表是 *- 或者 +;有序列表 1 这样的(本例中是 1
    • 分隔符:无序列不需要分隔符;有序列表是 . 或者 )(本例中是 .
    • 内部缩进:分隔符后第一个非空字符之间的空格数(本例中内部缩进为 1
    • 内容(本例中就是 第一个子列表项

    (以上只是大致的规则,还有很多细节规则比如空列表项、用 tab 缩进时如何计算缩进、有序列表开始序号、序号长度等等)

    本案例简单说就是列表项的后续子节点需要和第一个子节点缩进进行对齐,即围栏代码块想要成为项 1 的子节点需要这样写:

    image.png

    (Markdown AST https://spec.commonmark.org/dingus/

    如果代码块缩进没有对齐的话,案例会被分成三个块级元素:列表、代码块、列表:

    image.png

    这就是 CommonMark 规范的意义:能清晰地说明如何处理 Markdown 文本,没有二义性。


    为什么我会知道这些?

    我正在做一款实现 CM、GFM 规范的 Markdown 引擎 —— Lute(预计下个月会将社区的 Markdown 处理切换到该引擎上,等跑一段时间稳定点就正式开源),已经被这些规则折磨两个多月了。你也要成为像我一样专业的 Markdown 程序员吗?请看这份秘籍 😂

4 回帖
请输入回帖内容...
  • 88250 2

    终于碰到属于我专业领域的问题了。...

    先能用就行

    Markdown 文本:

    1. 第一个列表项
       ```
       围栏代码块标记 ` 符号要和列表项的第一个非空字符(第字)对齐
       ```
    2. 继续第二个列表项
    

    将渲染为:

    1. 第一个列表项
      围栏代码块标记 ` 符号要和列表项的第一个非空字符(第字)对齐
      
    2. 继续第二个列表项

    再刨根问底

    这涉及到 Markdown 语法规范(CommonMark)中列表项和围栏代码块的解析。

    首先明确一点:Markdown 会被解析为一颗树,其中列表项是一种块级容器(block container)节点,它可以包含其他的块级(block-level)元素节点。接下来我们了解一下列表项的构成:

    • 开头缩进(本例中缩进为 0,子列表或者放到块引用中才会有缩进)
    • 列表标记:无序列表是 *- 或者 +;有序列表 1 这样的(本例中是 1
    • 分隔符:无序列不需要分隔符;有序列表是 . 或者 )(本例中是 .
    • 内部缩进:分隔符后第一个非空字符之间的空格数(本例中内部缩进为 1
    • 内容(本例中就是 第一个子列表项

    (以上只是大致的规则,还有很多细节规则比如空列表项、用 tab 缩进时如何计算缩进、有序列表开始序号、序号长度等等)

    本案例简单说就是列表项的后续子节点需要和第一个子节点缩进进行对齐,即围栏代码块想要成为项 1 的子节点需要这样写:

    image.png

    (Markdown AST https://spec.commonmark.org/dingus/

    如果代码块缩进没有对齐的话,案例会被分成三个块级元素:列表、代码块、列表:

    image.png

    这就是 CommonMark 规范的意义:能清晰地说明如何处理 Markdown 文本,没有二义性。


    为什么我会知道这些?

    我正在做一款实现 CM、GFM 规范的 Markdown 引擎 —— Lute(预计下个月会将社区的 Markdown 处理切换到该引擎上,等跑一段时间稳定点就正式开源),已经被这些规则折磨两个多月了。你也要成为像我一样专业的 Markdown 程序员吗?请看这份秘籍 😂

    1 回复
  • Zephyr

    Lute 也是 Go 写的么大 D 哥 @88250

    1 回复
  • 88250

    是的,纯 golang 并且没有引入任何第三方库。

    BTW 麻烦楼主结个帖,点下采纳,谢谢!

  • xflash

    你好,Markdown 程序员 D 大 doge