【问题标题】:Does a Markdown parser exist that can also generate Markdown in Ruby?是否存在也可以在 Ruby 中生成 Markdown 的 Markdown 解析器?
【发布时间】:2012-04-01 01:53:41
【问题描述】:

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

例子:

# This is a title

And a short paragraph...
  • m = SomeLib.parse("# This is a tit...")
  • m.insert(1, "Here is a new paragraph") # 或类似的东西
  • m.to_md

应该变成

# This is a title

Here is a new paragraph

And a short paragraph...

由于我想对文档进行大量更改,因此我不想使用 REGEX 或类似技术。

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

【问题讨论】:

    标签: ruby parsing generator markdown


    【解决方案1】:

    可能不是开箱即用,但使用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..."}]
    

    【讨论】:

      猜你喜欢
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2013-03-19
      • 1970-01-01
      相关资源
      最近更新 更多