2012-03-15 6 views
1

Markdownドキュメントを解析して、私が操作できるツリー構造を得たいと思っています。その後、出力を再度Markdownにします。RubyでMarkdownを生成できるMarkdownパーサーは存在しますか?

例:

# This is a title 

And a short paragraph... 
  • メートル= SomeLib.parse( "#これは報復である...")
  • m.insert(1、 "ここが新しい段落である")#または
  • m.to_md

simmilar何かが

なった場合3210

文書を大きく変更したいので、私はREGEXやsimillarのテクニックを使いたくありません。

私はMarukuとBlueClothを調べましたが、何とかMarkdownをもう一度生成できません。

答えて

3

おそらく箱から外に出ないかもしれませんが、redcarpetを使用すると、カスタムレンダラーを作成してツリーを構築し、それを操作することができます。

この場合、Markdownおよび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..."}] 
関連する問題