TL;DR - 我怎样才能使用类似的东西improved_markdown :some_file
进行自定义渲染,但仍然像往常一样渲染布局?
通常,要在 Sinatra 中渲染 Markdown,您只需执行以下操作:
markdown :some_file
但我想添加“隔离”语法突出显示的功能,就像你可以在 Github README 文件中做的那样。
```ruby
class Foo
# etc
end
```
我已经部分工作了。
首先,我安装了Redcarpet并添加了一个使用Pygments.rb进行语法高亮的自定义渲染类:
# create a custom renderer that allows highlighting of code blocks
class HTMLwithPygments < Redcarpet::Render::HTML
def block_code(code, language)
Pygments.highlight(code, lexer: language)
end
end
然后我在一条路线中使用它,如下所示:
# Try to load any Markdown file specified in the URL
get '/*' do
viewname = params[:splat].first
if File.exist?("views/#{viewname}.md")
# Uses my custom rendering class
# The :fenced_code_blocks option means it will take, for example,
# the word 'ruby' from ```ruby and pass that as the language
# argument to my block_code method above
markdown_renderer = Redcarpet::Markdown.new(HTMLwithPygments, :fenced_code_blocks => true)
file_contents = File.read("views/#{viewname}.md")
markdown_renderer.render(file_contents)
else
"Nopers, I can't find it."
end
end
这几乎可以工作。Markdown 呈现为带有附加标记的 HTML 以用于突出显示。
唯一的问题是它不使用我的布局;毕竟,我只是在读取一个文件并返回呈现的字符串。正常的markdown :foo
通话将涉及 Tilt 的过程。
我是否必须创建自定义 Tilt 模板引擎才能使其正常工作,还是有更简单的方法?