首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Ruby On Rails上,如何在CodeRay中使用Markdown (RDiscount / BlueCloth)进行语法突出显示?

在Ruby On Rails上,如何在CodeRay中使用Markdown (RDiscount / BlueCloth)进行语法突出显示?
EN

Stack Overflow用户
提问于 2011-03-14 07:50:29
回答 1查看 1.3K关注 0票数 2

我知道有一个RailscastASCIIcast用于在CodeRay中使用Textile (RedCloth),并且它的方式是由一个助手完成的:

代码语言:javascript
运行
复制
module ApplicationHelper    
  def coderay(text)  
    text.gsub(/\<code( lang="(.+?)")?\>(.+?)\<\/code\>/m) do  
      CodeRay.scan($3, $2).div(:css => :class)  
    end  
  end  
end  

代码语言:javascript
运行
复制
<%= textilize(coderay(@article.content)) %>

所以假设@article.content已经包装了<code></code> (这样CodeRay就可以工作了)……

但是如果是Markdown,那么"4空格缩进“,就像在StackOverflow上一样,首先需要转换成<code></code>格式。

所以在这种情况下,看起来我们可以使用

代码语言:javascript
运行
复制
<%= coderay(Markdown.new(@article.content).to_html).html_safe  #html_safe for Rails 3 %>  

因此,它首先获取CodeRay要使用的<code></code>格式,然后基本上用CodeRay结果替换/<code>.*?</code>/m

这是一种合适的方式吗?但是如果我们在"4空格缩进“的代码上实际有<code></code>,那么它实际上会阻塞这个处理,因为现在有嵌套的<code>,所以第一个<code>将被匹配,跳过第二个<code>作为CodeRay的内容,然后匹配第一个</code>,并让第二个</code>悬空不被处理。如何做到这一点--也许CodeRay有一些Markdown选项?

EN

回答 1

Stack Overflow用户

发布于 2011-03-14 09:03:13

有一个名为lesstile的小宝石可以帮助你做到这一点。我不想使用gem,所以我提取了核心功能,它可以归结为:

代码语言:javascript
运行
复制
options = {
    :code_formatter => lambda {|code, lang|
        CodeRay.scan(CGI::unescapeHTML(code), lang).html.div
    }
}

text += "\n" unless (text.rindex("\n") == text.size - 1)
text.gsub!(/\r\n/, "\n")
output = ""

while match = text.match(/---\s*?([\w\s\._+()-]*?)\s*?\n(.*?)---\n/m)
    captures = match.captures
    code = captures[1]
    lang = captures[0].blank? ? nil : captures[0].downcase.strip.intern

    output += 
    options[:text_formatter][match.pre_match] +
    options[:code_formatter][code, lang]

    text = match.post_match
end

output += options[:text_formatter][text.chomp]

您可以通过使用“-”来表示您的textile/markdown中的代码,并可选择添加语言,如“-ruby”,如下所示:

代码语言:javascript
运行
复制
---ruby
def hi
  print "hi"
end
---

与Markdown配合使用时,效果非常好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5293361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档