折扣:与Sinatra一起生成toc

时间:2012-06-10 00:48:26

标签: ruby sinatra markdown tilt rdiscount

因此我使用Rdiscount设置sinatra来渲染带有HAML布局的markdown文件。这一切都有效,但我希望RDiscount根据haml文件中的标题生成目录。我已尝试在sinatra配置中设置它。

set :markdown, :generate_toc => true

但这似乎不起作用。

当我像这样渲染降价时,我也尝试过这样做:

markdown :PAGENAMEHERE, :layout => :'layouts/PAGENAMEHERE', :generate_toc => true

也不起作用。

这甚至可能吗?如果是的话,我做错了什么?

2 个答案:

答案 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。