是否存在可以在Ruby中生成Markdown的Markdown解析器?

时间:2012-03-15 14:24:17

标签: ruby parsing generator markdown

我想解析Markdown文档,以便得到一个我能够操作的树结构。之后我希望输出再次成为Markdown。

示例:

# This is a title

And a short paragraph...
  • m = SomeLib.parse(“#This is a tit ...”)
  • m.insert(1,“这是一个新段落”)#或者simmilar
  • m.to_md

应该成为

# This is a title

Here is a new paragraph

And a short paragraph...

由于我想要大量更改文档,我不想使用REGEX或simillar技术。

我看了Maruku和BlueCloth但不知何故我再也无法生成Markdown了。

1 个答案:

答案 0 :(得分:3)

可能没有开箱即用,但是使用redcarpet你可以编写一个自定义渲染器来构建你的树然后进行操作。

虽然在这种情况下要小心,但是不能重用Markdown和Renderer实例,并且自定义Renderer子类中的所有方法都应该返回一个字符串。这样的事情可能是一个起点:

class StackRenderer < Redcarpet::Render::Base
  attr_reader :items

  def initialize
    super
    @items = []
  end

  def header(title, level)
    items << { :text => title, :level => level, :type => :header }
    "#{'#' * level} #{title}\n\n"
  end

  def paragraph(text)
    items << { :text => text, :type => :paragraph }
    "#{text}\n\n"
  end
end

# example...
sr = StackRenderer.new
md = Redcarpet::Markdown.new(sr)

text = <<-EOF
# This is a title

And a short paragraph...
EOF

md.render(text) # => "# This is a title\n\nAnd a short paragraph...\n\n"

sr.items # => [{:type=>:header, :level=>1, :text=>"This is a title"},
         #     {:type=>:paragraph, :text=>"And a short paragraph..."}]