当前位置:  开发笔记 > 后端 > 正文

你会如何解析Markdown?

如何解决《你会如何解析Markdown?》经验,为你挑选了3个好方法。

我所知道的唯一一个使用实际解析器的降价实现是Jon MacFarleane的peg-markdown.它的解析器基于一个名为peg的Parsing Expression Grammar解析器生成器.


编辑:Mauricio Fernandez最近发布了他的Simple Markup Markdown解析器,他将其作为OcsiBlog Weblog Engine的一部分编写.因为解析器被写入OCaml中,这是非常简单和较短(268 SLOC为解析器,43 SLOC为HTML发射极),但超炫快(快于20%的折扣(写在手工优化C)和sixhundred倍的速度比BlueCloth(Ruby)),尽管它甚至没有针对性能进行优化.因为它仅供Mauricio自己内部用于他的博客,所以与官方Markdown规范有一些偏差,但Mauricio创建了一个分支,它可以恢复大部分变化.



1> Jörg W Mitta..:

我所知道的唯一一个使用实际解析器的降价实现是Jon MacFarleane的peg-markdown.它的解析器基于一个名为peg的Parsing Expression Grammar解析器生成器.


编辑:Mauricio Fernandez最近发布了他的Simple Markup Markdown解析器,他将其作为OcsiBlog Weblog Engine的一部分编写.因为解析器被写入OCaml中,这是非常简单和较短(268 SLOC为解析器,43 SLOC为HTML发射极),但超炫快(快于20%的折扣(写在手工优化C)和sixhundred倍的速度比BlueCloth(Ruby)),尽管它甚至没有针对性能进行优化.因为它仅供Mauricio自己内部用于他的博客,所以与官方Markdown规范有一些偏差,但Mauricio创建了一个分支,它可以恢复大部分变化.



2> 小智..:

我上周发布了一个新的基于解析器的Markdown Java实现,名为pegdown.pegdown使用PEG解析器首先构建一个抽象语法树,然后将其写入HTML.因此,与基于正则表达式的方法相比,它非常干净且更易于阅读,维护和扩展.PEG语法基于John MacFarlanes C实现的"peg-markdown".

也许你有兴趣...



3> Renaud Bompu..:

如果我试图解析markdown(及其扩展Markdown额外)我想我会尝试使用一个状态机并一次解析一个char,将一些内部结构链接在一起,表示当时的文本位,一次all解析,生成所有串起来的对象的输出.

基本上,当我读取输入文件时,我会构建一个类似迷你DOM的树.
要生成输出,我只需遍历树并输出HTML或其他任何内容(PS,LaTex,RTF,...)

可能增加复杂性的事情:

事实上你可以混合使用HTML和降价,虽然规则可以很容易实现:只需忽略两个平衡标签之间的任何内容并逐字输出.

URL和注释可以在文本底部引用它们.使用超链接的数据结构可以简单地记录如下:

[my text to a link][linkkey]
results in a structure like: 
    URLStructure: 
    |  InnerText : "my text to a link"
    |  Key       : "linkkey"
    |  URL       : 

可以使用下划线定义标题,这可能会强制我们在通用段落中使用简单的数据结构,并在读取文件时修改其属性:

ParagraphStructure:
|  InnerText    : the current paragraph text 
|                 (beginning of line until end of line).
|  HeadingLevel :  or 1-4 when we can assess 
|                 that paragraph heading level, if any.

无论如何,只是一些想法.

我确信有很多小细节需要处理,我很确定Regexes在这个过程中会变得很方便.
毕竟,他们的目的是处理文本.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有