Следующий метод принимает многострочные строки html_encoded и заменяет все элементы блочной цитаты maruku, которые были преобразованы в коды сущностей html, обратно в>
Для этой реализации строка цитаты maruku определяется как строка, начинающаяся с одной или нескольких> последовательностей, разделенных необязательным пробелом.
def maruku_escape(text)
text.gsub(/^([\s]*\>)+/) {|match| match.gsub(/\>/, '>')}
end
Использовалась следующая тестовая строка
test_text = "<b>A bold tag</b>
<span>Some text in a span</span>
Some Markdown
> Blockquote 1
> > nested blockquote 1
> > nested blockquote 2
>> nested blockquote 3 with no spaces
Some plain text with an invalid blockquote > Some blockquote text
<i>The end in italics<i>"
И используя это следующим образом maruku_text = maruku_escape(ERB::Util.html_escape(test_text))
дал следующие результаты
result = "<b>A bold tag</b>
<span>Some text in a span</span>
Some Markdown
> Blockquote 1
> > nested blockquote 1
> > nested blockquote 2
>> nested blockquote 3 with no spaces
Some plain text with an invalid blockquote > Some blockquote text
<i>The end in italics<i>
"