RDiscount:generate_toc с Синатрой

Так что у меня есть настройка sinatra с Rdiscount для рендеринга файла уценки с макетом HAML. Это все работает, но я хочу, чтобы RDiscount генерировал оглавление на основе заголовков в моем файле haml. Я попытался установить его в конфигурации синатры.

set :markdown, :generate_toc => true

но это не похоже на работу.

Я также попытался сделать это, когда я рендерить уценку так:

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

что тоже не работает.

Это вообще возможно? Если это так, что я делаю не так?

2 ответа

Решение

Хотя ответ @three мне очень помог, я хотел бы показать, возможно, более общее решение:

class MDWithTOC < ::Tilt::RDiscountTemplate
  def flags
    [:generate_toc]
  end
end

Tilt.register MDWithTOC, 'md'

Здесь мы переопределяем метод flags обработчика шаблона RDiscount Tilt и регистрируем его как обработчик для md формат.

Теперь вы можете использовать md помощник, как всегда, и он будет генерировать оглавление.

Это должно работать:

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. Все, что мешало созданию токенов, должно работать таким образом. Я нашел решение через https://github.com/mjijackson/markdown/blob/master/app.rb

Другие вопросы по тегам