为 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 的原始回答。
我在我的 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 的原始回答。