La méthode suivante prend des chaînes html_encoded multilignes et remplace tous les éléments blockquote de Maruku qui ont été converties en codes entité html Retour à >
Dans le cadre de cette implémentation, une ligne de bloc de maruku est définie comme une ligne commençant par une ou plusieurs séquences > séparées par des espaces blancs facultatifs.
def maruku_escape(text)
text.gsub(/^([\s]*\>)+/) {|match| match.gsub(/\>/, '>')}
end
La chaîne de test suivant a été utilisé
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>"
Et en utilisant cela comme suit maruku_text = maruku_escape(ERB::Util.html_escape(test_text))
donné les résultats suivants
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>
"
Quelqu'un avec une meilleure regex-fu que moi peut être capable de travailler sur une regex qui n'appelle pas gsub deux fois. –
Veuillez également noter que Rails 3 appelle automatiquement html_escape pour vous. –