Redcarpet 和 Rouge 的语法突出显示在 Rails 5 应用程序中不起作用



有人有使用红地毯和胭脂宝石的经验吗?我正在尝试在我的博客应用程序中使用 gem 进行语法突出显示。我的实现基于这篇博文:

http://www.brettdemetris.com/posts/4

这些是我采取的步骤:

我实现了宝石(红地毯,胭脂)

我的应用程序助手文件如下所示:

app/helpers/application_helper.rb
module ApplicationHelper
require 'rouge'
require 'rouge/plugins/redcarpet'
class HTML < Redcarpet::Render::HTML
  include Rouge::Plugins::Redcarpet
  def block_code(code, language)
    Rouge.highlight(code, language || 'text', 'html')
  end
end
def markdown(text)
    options = {
      filter_html:     true,
      hard_wrap:       true,
      link_attributes: { rel: 'nofollow', target: "_blank" },
      space_after_headers: true,
      fenced_code_blocks: true
    }
    extensions = {
      autolink:           true,
      highlight:          true,
      superscript:        true,
      disable_indented_code_blocks: true
    }
    renderer = Redcarpet::Render::HTML.new(options)
    markdown = Redcarpet::Markdown.new(renderer, extensions)
    markdown.render(text).html_safe
  end
end

我有一个 Rouge 的样式表: app/assets/stylesheets/rouge.css.erb

<%= Rouge::Themes::Github.render(:scope => '.highlight, code') %>
.highlight {
  background-color: #f5f7f9;
  padding: 1em;
}
.highlight .err {
    color: #a61717;
    background-color: #f5f7f9;
}

显然,转换为 markdown 有效,但 Rouge 的语法突出显示不起作用:

例如,当我在博客文章中使用此代码时:

```ruby
e =  "some ruby code"
e.puts
```

代码未突出显示。

上述代码片段的输出如下:

<pre><code class="ruby">e = &quot;some variable&quot;
e.puts
</code></pre>

我错过了什么吗?

我的代码存储库在这里:

https://github.com/acandael/personalsite/tree/markdown

任何建议都受到高度赞赏

问候

安东尼

对于感兴趣的人,这是我的应用程序助手中的工作代码:

app/helpers/application_helper.rb
module ApplicationHelper
require 'redcarpet'
require 'rouge'
require 'rouge/plugins/redcarpet'
class HTML < Redcarpet::Render::HTML
  include Rouge::Plugins::Redcarpet
  def block_code(code, language)
    Rouge.highlight(code, language || 'text', 'html')
  end
end
def markdown(text)
    options = {
      filter_html:     true,
      hard_wrap:       true,
      link_attributes: { rel: 'nofollow', target: "_blank" }
    }
    extensions = {
      autolink:           true,
      highlight:          true,
      superscript:        true,
      disable_indented_code_blocks: true,
      space_after_headers: true,
      fenced_code_blocks: true
    }
    #renderer = Redcarpet::Render::HTML.new(options)
    renderer = HTML.new(options)
    markdown = Redcarpet::Markdown.new(renderer, extensions)
    markdown.render(text).html_safe
  end
end

这是我在视图中实现它的方式:

app/views/articles/show.html.erb
<%= raw(markdown(@article.body)) %>

降价和语法突出显示现在正在工作。

相关内容

  • 没有找到相关文章

最新更新