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