我正在尝试向当前使用 RDiscount 的博客添加一些语法突出显示。我正在使用 RDiscount 将 Markdown 转换为 HTML,然后使用 CodeRay 解析 HTML 代码块以添加语法突出显示。这是我到目前为止所拥有的:
class Post < ActiveRecord::Base
before_save :render_body
def render_body
self.rendered_body = coderay(markdown(self.body))
end
def markdown(text)
RDiscount.new(text).to_html
end
def coderay(text)
text.gsub(/\<code( lang="(.+?)")?\>(.+?)\<\/code\>/m) do
CodeRay.scan($3, $2).div(:css => :class)
end
end
end
在我看来:
<%= raw @post.rendered_body %>
使用此降价:
<code lang="ruby">
def function(param1, param2)
puts param1
param2.each do |a|
a.hello :world
end
end
</code>
结果是代码块被包装了两次。
<pre>
<div class="CodeRay">
<div class="code">
<pre>
def function(param1, param2)
puts param1
param2.each do |a|
a.hello :world
end
end
</pre>
</div>
</div>
</pre>
我应该怎么做?