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