Как стать автором
Обновить

Комментарии 4

У себя используем kramdown.
Выбирал его не из соображений производительности (все равно итоговый html нужно кешировать), а из соображений расширяемости. А раширять его очень легко за счет построения промежуточного дерева, которое можно потом обрабатывать как угодно.
Зависит от задачи конечно. Redcarpet тоже расширяем. Простой пример: хочу чтобы все генерируемые ссылки открывались в новом окне браузера. То бишь надо ко всем ссылкам добавить target="_blank". Реализуем свой рендерер, наследуя от существующего и заменяем один метод, формирующий ссылки, на свой:

class MyRenderer < Redcarpet::Render::HTML
  def link(link, title, content)
    "<a href='#{link}' title='#{title}' target='_blank'>#{content}</a>"
  end
end

И подсовываем в парсер этот рендерер вместо стандартного.
В том то и дело, что Redcarpet замечательно позволяет переопределять существующие элементы, но парсер там сишный, если не изменяет память, и патчить для добавления новых markdown элементов прийдется его.
Да парсер написан на Си. Как вариант, для добавления новых элементов можно переопределить в своем рендерере методы preprocess и/или postprocess, куда подается весь текст, и обработать дополнительно регулярками или еще как. Не совсем красиво, но должно работать.
Спасибо за ссылку на kramdown. Гляну на досуге.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий