Я знаю, что существуют Railscast и ASCIIcast для использования Textile (RedCloth) с CodeRay, и это делается помощником:
module ApplicationHelper
def coderay(text)
text.gsub(/\<code( lang="(.+?)")?\>(.+?)\<\/code\>/m) do
CodeRay.scan($3, $2).div(:css => :class)
end
end
end
а также
<%= textilize(coderay(@article.content)) %>
поэтому предполагается, что @article.content
уже имеет <code>
и </code>
(чтобы CodeRay мог работать)...
но что, если это Markdown, то «отступ в 4 пробела», как в StackOverflow, сначала нужно будет преобразовать в формат <code>
и </code>
.
Итак, в этом случае, похоже, мы можем использовать
<%= coderay(Markdown.new(@article.content).to_html).html_safe #html_safe for Rails 3 %>
поэтому он сначала получает формат <code>
и </code>
для использования CodeRay, а затем просто заменяет /<code>.*?</code>/m
результатами CodeRay.
Это правильный способ сделать это? Но если у нас на самом деле есть <code>
и </code>
в коде с отступом в 4 пробела, то это на самом деле задушит эту обработку, потому что теперь есть вложенные <code>
, поэтому первое <code>
будет сопоставлено, а второе <code>
будет пропущено как просто контент для CodeRay. , а затем сопоставьте первый </code>
и оставьте второй </code>
необработанным. Как это можно сделать - может быть, у CodeRay есть какие-то опции Markdown?