Parsing 公共标记解析***
假设我想使用CommonMark标准将字符串Parsing 公共标记解析***,parsing,markdown,commonmark,Parsing,Markdown,Commonmark,假设我想使用CommonMark标准将字符串***cat***解析为Markdown。标准上说(): 如果找到一个: 弄清楚我们是强调还是强烈强调:如果两者都更接近 而开口器跨距的长度>=2,我们有强跨距,否则是规则跨距 在文本节点之后相应地插入emph或强emph节点 与开瓶器相对应 从分隔符中删除开始符和结束符之间的任何分隔符 堆叠 从中删除1(对于常规emph)或2(对于强emph)分隔符 打开和关闭文本节点。如果它们因此变成空的, 删除它们并删除分隔符的相应元素 堆栈如果移除关闭节点,
***cat***
解析为Markdown。标准上说():
如果找到一个:
弄清楚我们是强调还是强烈强调:如果两者都更接近
而开口器跨距的长度>=2,我们有强跨距,否则是规则跨距
在文本节点之后相应地插入emph或强emph节点
与开瓶器相对应
从分隔符中删除开始符和结束符之间的任何分隔符
堆叠
从中删除1(对于常规emph)或2(对于强emph)分隔符
打开和关闭文本节点。如果它们因此变成空的,
删除它们并删除分隔符的相应元素
堆栈如果移除关闭节点,则将当前位置重置为
堆栈中的下一个元素
根据我对此的阅读,结果应该是cat
,因为首先添加
,然后添加
。但是,我在outputcat
中尝试过的所有在线降价编辑器。我错过了什么
这是我认为应该发生的事情的视觉表现
TextNode[***]TextNode[cat]TextNode[***]
TextNode[*]StrongEmphasis TextNode[cat]TextNode[*]
TextNode[]Emphasis StrongEmphasis TextNode[cat]TextNode[]
Emphasis StrongEmphasis TextNode[cat]重要的是要记住,Commonmark和Markdown不一定是一回事。Commonmark是Markdown的最新变体。大多数标记解析器在Commonmark规范启动之前就已经存在并建立了它们的行为 在给定的示例中,
或
标记应该放在第一位,而原始版本没有对此做出评论,参考实现(markdown.pl)的实际行为是在输出中的
标记之前列出
标记。事实上,MarkdownTest包是由Markdown和Markdown.pl的作者创建的(据我所知,原始版本已不再在线提供,但它是一个忠实的副本,自MarkdownTest最初导入以来,它没有显示对该测试的任何修改)。在AFAICT中,每个(非公共标记)标记解析器都严格遵循该行为
Commonmark规范采用了不同的路线。本规范第14条明确规定:
解释总是比解释好
。。。并用以下内容进行备份:
***foo***
foo
事实上,您可以看到这正是Commonmark的参考实现
另一方面,最初的问题引用了规范中关于如何实现解析器的部分。虽然可能对解析器创建者有用,但我不建议使用该部分来确定正确的语法处理和/或输出。应参考实际规则;事实上,在这种情况下,它们显然提供了预期的输出。但这个问题是关于实现和规范之间的明显差异,而不是规范的解释
有关更完整的比较,请参阅。除了少数(完全)损坏的实现之外,每个“经典”标记解析器都遵循Markdown.pl,而每个Commonmark解析器都遵循Commonmark规范。因此,规范和实现之间没有实际差异。差别在于降价和普通标记之间
至于为什么Commonmark的作者在这方面选择了不同的路线,或者为什么他们在明显不同的时候坚持称Commonmark为“Markdown”,这些都是离题的,最好问问作者自己。重要的是要记住,Commonmark和Markdown不一定是同一件事。Commonmark是Markdown的最新变体。大多数标记解析器在Commonmark规范启动之前就已经存在并建立了它们的行为 在给定的示例中,
或
标记应该放在第一位,而原始版本没有对此做出评论,参考实现(markdown.pl)的实际行为是在输出中的
标记之前列出
标记。事实上,MarkdownTest包是由Markdown和Markdown.pl的作者创建的(据我所知,原始版本已不再在线提供,但它是一个忠实的副本,自MarkdownTest最初导入以来,它没有显示对该测试的任何修改)。在AFAICT中,每个(非公共标记)标记解析器都严格遵循该行为
Commonmark规范采用了不同的路线。本规范第14条明确规定:
解释总是比解释好
。。。并用以下内容进行备份:
***foo***
foo
事实上,您可以看到这正是Commonmark的参考实现
另一方面,最初的问题引用了规范中关于如何实现解析器的部分。虽然可能对解析器创建者有用,但我不建议使用该部分来确定正确的语法处理和/或输出。应参考实际规则;事实上,在这种情况下,它们显然提供了预期的输出。但这个问题是关于实现和规范之间的明显差异,而不是规范的解释
有关更完整的比较,请参阅。除了少数(完全)损坏的实现之外,每个“经典”标记解析器都遵循Markdown.pl,而每个Commonmark解析器都遵循Commonmark规范。因此,规范和实现之间没有实际差异。差别在于降价和普通标记之间
至于为什么是平民
***foo***
<p><em><strong>foo</strong></em></p>