因此我使用Rdiscount设置sinatra来渲染带有HAML布局的markdown文件。这一切都有效,但我希望RDiscount根据haml文件中的标题生成目录。我已尝试在sinatra配置中设置它。
set :markdown, :generate_toc => true
但这似乎不起作用。
当我像这样渲染降价时,我也尝试过这样做:
markdown :PAGENAMEHERE, :layout => :'layouts/PAGENAMEHERE', :generate_toc => true
也不起作用。
这甚至可能吗?如果是的话,我做错了什么?
答案 0 :(得分:0)
这应该有效:
get '/' do
text = File.read('README.md')
markdown = RDiscount.new(text, :generate_toc)
body = markdown.to_html
haml :home, :layout => true, :locals => {:body => body}
end
您可以通过RDiscount直接创建主体,并在HAML布局中将其包含为纯HTML。无论什么阻止创造toc都应该以这种方式本地工作。我通过https://github.com/mjijackson/markdown/blob/master/app.rb
找到了解决方案答案 1 :(得分:0)
虽然@ three的回答对我有很大帮助,但我想展示一个更为通用的解决方案:
class MDWithTOC < ::Tilt::RDiscountTemplate
def flags
[:generate_toc]
end
end
Tilt.register MDWithTOC, 'md'
这里我们覆盖RDiscount Tilt模板处理程序的flags方法,并将其作为md
格式的处理程序进行注册。
现在您可以像往常一样使用md
帮助程序,它将生成TOC。