Существует ли анализатор Markdown, который также может генерировать Markdown в Ruby? - PullRequest
1 голос
/ 15 марта 2012

Я хочу проанализировать документ Markdown, чтобы получить древовидную структуру, которой я могу манипулировать.После этого я хочу, чтобы вывод снова был Markdown.

Пример:

# This is a title

And a short paragraph...
  • m = SomeLib.parse ("# Это титул ...")
  • m.insert (1, «Вот новый абзац») # или что-то похожее
  • m.to_md

Должно стать

# This is a title

Here is a new paragraph

And a short paragraph...

Так как я хочу сильно изменить документ, я не хочу использовать методы REGEX или simillar.

Я изучил Maruku и BlueCloth, но почему-то не могу снова сгенерировать Markdown.

1 Ответ

3 голосов
/ 15 марта 2012

Возможно, не из коробки, но, используя 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..."}]
...