使用 Redcarpet 和 Pygments.rb 在我的 Rails 4.0.4 应用程序中突出显示代码语法?

Posted

技术标签:

【中文标题】使用 Redcarpet 和 Pygments.rb 在我的 Rails 4.0.4 应用程序中突出显示代码语法?【英文标题】:Code syntax highlighting in my Rails 4.0.4 app using Redcarpet & Pygments.rb? 【发布时间】:2014-05-25 01:01:51 【问题描述】:

目标

我正在尝试渲染带有 sn-ps 代码的 markdown 文档,并且我想突出显示 Github 或 BitBucket 上的语法。

我的环境

Rails 4.0.4 Ruby 2.1.1

在我的 gemfile 中

gem 'haml-rails'
gem 'redcarpet' # markdown
gem 'rdiscount'
gem 'pygments.rb', '~> 0.5.4'

初始化器

我已经尝试过了,但是我的 sn-ps 代码没有突出显示:

module Haml::Filters

  remove_filter("Markdown") #remove the existing Markdown filter

  module Markdown

    include Haml::Filters::Base

    class htmlwithPygments < Redcarpet::Render::HTML
      def block_code(code, language)
        Pygments.highlight(code, lexer: language)
      end
    end


    def render(text)
      #Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(prettify: true), fenced_code_blocks: true).render(text)
      Redcarpet::Markdown.new(HTMLwithPygments, fenced_code_blocks: true).render(text)
    end

  end
end

用这个简单的 YAML 测试

 hello:
    world: "hey"

生成的代码看起来不错 (?)

<div class="highlight">
   <pre>  
    <span class="l-Scalar-Plain">hello</span><span class="p-Indicator">:</span>
    <span class="l-Scalar-Plain">world</span><span class="p-Indicator">:</span> 
    <span class="s">"hey"</span>
    </pre>
</div>

但它是纯灰色的,没有突出显示

是否需要为这些类安装任何 CSS 文件才能正确呈现?

有什么建议吗?

【问题讨论】:

看看这个blog post对你有没有帮助。 我实际上做了我的家庭作业并尝试了大部分教程资源,但考虑到我使用的是 Rails .4.0.4,可能会有一点问题 【参考方案1】:

我是如何解决的:

bash
$ pygmentize -S default -f html > style.css 

并将此文件添加到我的 css 文件夹中。

【讨论】:

以上是关于使用 Redcarpet 和 Pygments.rb 在我的 Rails 4.0.4 应用程序中突出显示代码语法?的主要内容,如果未能解决你的问题,请参考以下文章

Rails & Redcarpet:在 ApplicationHelper 中使用时未初始化的常量 Redcarpet::Render

Redcarpet 语法高亮

Ruby/Redcarpet:从文本中去除降价

使用 Redcarpet 和 Pygments.rb 在我的 Rails 4.0.4 应用程序中突出显示代码语法?

Redcarpet/Bluecloth 不允许标题?

使用 Redcarpet 的 Markdown 外部图像链接