我知道有一个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,那么像 StackOverflow 上的“4 空格缩进”,首先需要先转换为<code>
格式</code>
。
所以在这种情况下,似乎我们可以使用
<%= coderay(Markdown.new(@article.content).to_html).html_safe #html_safe for Rails 3 %>
所以它首先获取 CodeRay 使用的 <code>
和</code>
格式,然后基本上/<code>.*?</code>/m
用 CodeRay 结果替换。
这是一个正确的方法吗?但是如果我们实际上有<code>
“ </code>
4空格缩进”代码,那么它实际上会阻塞这个处理,因为现在有嵌套<code>
,所以第一个<code>
将被匹配,跳过第二个<code>
作为CodeRay的内容,然后匹配首先</code>
,让第二个</code>
悬空未处理。如何做到这一点——也许 CodeRay 有一些 Markdown 选项?