首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Textile/Markdown中有解析内联修饰符的标准方法吗

在Textile/Markdown中有解析内联修饰符的标准方法吗
EN

Stack Overflow用户
提问于 2012-08-02 07:54:32
回答 2查看 171关注 0票数 0

我一直在考虑使用Scala的解析器组合子库(基本上是一个PEG解析器)编写Textile解析器,并且想知道我应该使用哪种方法来解析内联修饰符

代码语言:javascript
复制
This is *bold* text, _italic_ text, +underlined+ text, etc.

在这种情况下,很清楚什么是什么,以及应该解析什么。然而,有大量的边缘情况并不是很清楚。只关注粗体文本:

代码语言:javascript
复制
Which sections get bolded: 
*onomato*poeia* ?
bold *word*, without a space after?
tyr*annos*aurus
a bold word in a (*bracket*)?
How about *This *case?

显然,这是主观(应该将其视为粗体)和客观(如何使解析规则正确地解析它)的混合。

我倾向于像这样的PEG

代码语言:javascript
复制
wordChar = [a-zA-Z]
nonWordChar = [^a-zA-Z]
boldStart = nonWordChar ~ * ~ wordChar
boldEnd = wordChar ~ * ~ nonWordChar
boldSection = boldStart ~ rep(not(boldEnd) ~ anyChar) ~ boldEnd

它将按如下方式解析上述内容:

代码语言:javascript
复制
<b>onomato*poeia</b> ?
bold <b>word</b>, without a space after?
tyr*annos*aurus    <- fails because of lack of whitespace
a bold word in a (<b>bracket</b>)?
How about *This *case? <- fails because there is no correct closing *

然而,我不确定这个方法是否适用于所有用例,并且对所有边缘用例都有很好的定义。有没有一种我可以复制和依赖的标准方法?如果我可以避免的话,我宁愿不依赖我的特别的、没有经过深思熟虑的语言规范。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-09 07:02:46

在markdown的情况下没有标准,在边缘情况下实现也不同。对于markdown情况下的一组选择,您可以查看MultiMarkdown中也使用的peg-markdown。当然,在这方面,markdown比textile更复杂,因为它使用**表示粗体,使用*表示斜体,这会导致更多关于如何处理*hello**there**等内容的决定。

PHP markdown extra的开发人员Michel Fortin有一个test suite,其中包含许多用于粗体/斜体的边界大小写。然而,我不认为在这里对他的决定有普遍的共识,许多实现都有不同的解析方式。

也就是说,我认为以下决定在降价方面是相当没有争议的:

如果下一个字符是non-whitespace.

  • *,则
  • *仅开始强调;如果前一个字符是non-whitespace.
  • Emphasis,则仅结束强调;因此,在he*ll*o中,强调了两个l(尽管一些标记实现对_字符禁用了此功能,因为下划线在identifiers).

中很常见

票数 1
EN

Stack Overflow用户

发布于 2012-08-09 07:23:04

在寻找了一段时间后,我找到了inline markup recognition rules for reStructuredText

它不遵循markdown的规则;特别是像t*hi*s这样的东西不会被解析为内联标签,但它非常相似,并且具有相似的总体用途。

这也是一个有点复杂的规范(例如,使用特殊的括号和标点符号),但它非常详细,充分的解释和合理的。我发现它的规范是一个非常坚实的基础。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11769211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档