为 slim 中的 markdown 生成语法高亮

Generate syntax highlighting for markdown in slim

我在我的 rails 应用程序中使用 slim 来生成我的视图,并启用了 markdown 引擎(使用 redcarpet)所以我可以像这样在我的 slim 文件中编写 markdown:

h2#usage Usage
markdown:
    ### Via JavaScript

    Call the dropdowns via JavaScript:

    ```js
    $('.dropdown-toggle').dropdown()
    ```

我还在 config/initializers/slim.rb:

中启用了防护代码块
Slim::Embedded.default_options[:markdown] = {
  fenced_code_blocks: true
}

我的问题是,如何配置 redcarpet 或另一个 gem 来为我的 markdown 中的围栏代码块生成语法突出显示?我调查了 pygments and rouge,但我有点迷路了。

在这里拼接一些东西:

您可以使用胭脂 gem 来突出显示源代码。这很简单 well documented how to use it with Redcarpet. Getting Slim to use your renderer is the tricky part, but the luckily others have already fought this battle: a pretty old github issue and a resulting blog post

require 'rouge/plugins/redcarpet'

class HTML < Redcarpet::Render::HTML
  include Rouge::Plugins::Redcarpet # yep, that's it.
end

Slim::Embedded.set_default_options markdown: {
  renderer: HTML.new,
  fenced_code_blocks: true
}

我还没有对此进行测试,因此代码可能需要一些调整。

快速更新 - 因为 Slim 的 API 发生了变化...

我使用了以下对我有用的代码,它既解决了 Slim 的 API 中的更改,也解决了命名 class 破坏命名空间的问题。

require 'rouge/plugins/redcarpet'
Slim::Embedded.options[:markdown] = {
        fenced_code_blocks: true,
        renderer: (Class.new(Redcarpet::Render::HTML) {include Rouge::Plugins::Redcarpet} ).new
    }

感谢@tmichel 的原始回答。