Согласно спецификации Markdown (такой, как она есть):
Синтаксис форматирования Markdown не обрабатывается в тегах HTML уровня блока.Например, вы не можете использовать стиль Markdown *emphasis*
внутри блока HTML.
На странице Redcarpet GitHub есть запрос функции , но, к сожалению, нет никакого заключения, которое поможетyou.
Вероятно, путь наименьшего сопротивления здесь будет проходить через Redcarpet, а затем запускать полученный HTML-код через Nokogiri, снова пропуская содержимое каждого из его узлов уровня блока через Redcarpet.Например:
require 'redcarpet'
require 'nokogiri'
block_nodes = %w(p div blockquote ...) #¹
markdown = Redcarpet::Markdown.new Redcarpet::Render::HTML,
:fenced_code_blocks => true
html = markdown.render text
noko_doc = Nokogiri::HTML::DocumentFragment.parse html
noko_doc.css( *block_nodes ).each do |node|
node.content = markdown.render node.content if node.text?
end
html = noko_doc.to_html
¹ https://github.com/tanoku/sundown/blob/master/html_block_names.txt
Конечно, если, если у вас есть более одного уровня вложенности (блок HTML, содержащий блок Markdown, содержащий блок HTML и т. Д.)вам придется делать это рекурсивно на всех новых HTML-узлах, которые вы генерируете.Это было бы легко, но, очевидно, влияет на производительность, поэтому я сказал «путь наименьшего сопротивления», а не «лучшее решение во всех случаях».