SGML 有许多允许标记最小化的可选特性,例如可选或隐含的开始和结束标记,以及用于更简单的标记别名的 SHORTREF
。因此是否有可能编写一个 DTD,一个完美的 SGML 实现,这一直是一个罕见的甚至不存在的东西,可以用来成功解析任意 Markdown 文档?
现有的 markdown 解析器之间存在差异,Commonmark 试图将其标准化,因此基于 SGML 的解析器在边界情况下有一些余地。
最佳答案
虽然许多 markdown 结构可以使用 SGML 短引用解析为 HTML,但 markdown 的内联和引用链接不能。
[link text](link URL)
等内联链接存在问题,因为必须填充生成的 a
元素的 href
属性以链接 URL 作为值,这对 SGML 短引用根本不起作用。此外,引用链接需要无限制的前瞻性,因为它们可以在实际使用之前或之后放置在文本中的任何位置。
另一个问题是 Markdown 自动转义和自动链接。
编辑:仅供引用,sgmljs.net(我的项目)包含对嵌入 SGML 解析器中的 HTML 翻译的完整 Markdown (+ 通用扩展),但它仅通过公共(public)“虚拟”公开 Markdown 简短引用 map 声明在文档的序言中引用时“神奇地”将 markdown 转换为 HTML 的标识符;实际的 Markdown 翻译和处理是使用 JavaScript 硬编码的(参见 http://sgmljs.net/docs/markdown.html)。使用未提及的 SGML 中的 markdown 的一个问题是 markdown 需要一个“标记 block ”(泛化为允许任何显式元素标签或其他标记结构的 HTML block )由换行符与前面或后面的 markdown 文本分隔,这是一个约束无法在 SGML 中捕获。
关于markdown - 用于 Markdown 的 SGML 解析器可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54020477/