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找到了解决方案