【发布时间】:2016-10-06 17:24:10
【问题描述】:
周围有很多教程,但它们似乎不完整或不完全最新或不完全适合我。
这就是我所做的。
宝石文件:
gem 'rouge'
gem 'redcarpet'
然后我创建了一个config/initializer/rouge.rb:
require 'rouge/plugins/redcarpet'
然后我创建了一个名为app/assets/stylesheets/rouge.css.erb的文件
<%= Rouge::Themes::Github.render(:scope => '.highlight') %>
然后在我的app/helpers/application_helper.rb 中,我添加了这个:
module ApplicationHelper
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)
render_options = {
filter_html: true,
hard_wrap: true,
link_attributes: { rel: 'nofollow' }
}
renderer = HTML.new(render_options)
extensions = {
autolink: true,
fenced_code_blocks: true,
lax_spacing: true,
no_intra_emphasis: true,
strikethrough: true,
superscript: true
}
Redcarpet::Markdown.new(renderer, extensions).render(text).html_safe
end
end
然后在我的show.html.erb 中,我这样做了:
<%= markdown(@question.body) %>
但这实际上是行不通的。它像这样输出我的ruby 代码 sn-p:
如何让这个 sn-p 的代码像 Github 一样被格式化?或者甚至只是第一步被格式化,那么我该如何调整格式呢?
我没有看到页面源代码中包含样式表,所以我不知道要调整哪些样式来满足我的需要。
编辑 1
甚至当我这样做时:
<div class="highlight">
<%= @question.test_suite %>
</div>
呈现如下:
编辑 2
我尝试了 BoraMa 的建议,得到的输出如下所示:
编辑 3
我对BoraMa的回答做了如下修改。
在我的block_code 方法中,我将highlight 调用如下:
Rouge.highlight(code, 'ruby', 'html')
那么在我看来我会这样做:
<%= raw rouge_markdown(<<-'EOF'
def rouge_me
puts "this is a #{'test'} for rouge"
end
EOF
) %>
然后产生这个:
注意我指的是截图底部的代码sn-p。
但是,顶部的文本是这样生成的:
<pre class="highlight ruby">
<%= rouge_markdown(@question.body) %>
</pre>
它的渲染如屏幕截图所示。
编辑 4
删除<div class="highlight"> 后,我看到了:
Aka....根本没有渲染任何内容。
一旦我将raw 添加到我的视图中...又名<%= raw rouge_markdown(@question.body) %>
视图呈现这个:
编辑 5
这里是各种@question 对象的内容:
[1] pry(#<#<Class:0x007fc041b97ce8>>)> @question.body
=> "5.times do\r\n puts \"Herro Rerl!\"\r\nend"
[1] pry(#<#<Class:0x007fc041b97ce8>>)> @question.body
=> "puts \"Hello World version 9\"\r\nputs \"This comes after version 8.\"\r\nputs \"This comes after version 7.\"\r\nputs \"This comes after version 6.\"\r\nputs \"This comes after version 5.\"\r\nputs \"This comes after version 4.\"\r\nputs \"This comes after version 3.\"\r\nputs \"This comes after version 2.\"\r\nputs \"This definitely comes after version 1.\""
[1] pry(#<#<Class:0x007fc041b97ce8>>)> @question.body
=> "def convert_relation(invited_gender, relation)\r\n case invited_gender\r\n \twhen \"male\"\r\n \tcase relation\r\n when \"daughter\", \"son\" then \"dad\"\r\n when \"mom\", \"dad\" then \"son\"\r\n when \"grandfather\", \"grandmother\" then \"grandson\"\r\n when \"sister\", \"brother\" then \"brother\"\r\n when \"wife\" then \"husband\"\r\n when \"husband\" then \"husband\"\r\n end\r\n when \"female\"\r\n \tcase relation\r\n when \"daughter\", \"son\" then \"mom\"\r\n when \"mom\", \"dad\" then \"daughter\"\r\n when \"grandfather\", \"grandmother\" then \"granddaughter\"\r\n when \"sister\", \"brother\" then \"sister\"\r\n when \"wife\" then \"wife\"\r\n when \"husband\" then \"wife\"\r\n end\r\n end\r\nend\r\n\r\nputs convert_relation(\"male\", \"wife\")"
【问题讨论】:
标签: ruby-on-rails syntax-highlighting ruby-on-rails-5 pygments rouge