我想解析Markdown文档,以便得到一个我能够操作的树结构。之后我希望输出再次成为Markdown。
示例:
# This is a title
And a short paragraph...
应该成为
# This is a title
Here is a new paragraph
And a short paragraph...
由于我想要大量更改文档,我不想使用REGEX或simillar技术。
我看了Maruku和BlueCloth但不知何故我再也无法生成Markdown了。
答案 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..."}]