Markdown 编辑器 bug ?

本贴最后更新于 2160 天前,其中的信息可能已经时移世异

在编辑器输入这样的语句

image.png

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

image.png

相关帖子

被采纳的回答
  • 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 程序员吗?请看这份秘籍 😂

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 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 via macOS

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

    1 回复
  • 88250

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

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

  • xflash

    你好,Markdown 程序员 D 大 doge 

推荐标签 标签

  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    954 引用 • 944 回帖
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 544 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 675 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 181 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2040 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 189 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    326 引用 • 1395 回帖
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    17 引用 • 7 回帖
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 1 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    188 引用 • 1057 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 405 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    438 引用 • 1238 回帖 • 590 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 151 关注
  • Excel
    31 引用 • 28 回帖
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 10 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    43 引用 • 44 回帖
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 1 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    7 引用 • 28 回帖 • 2 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 4 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    98 引用 • 903 回帖