# table of contents generation # add toc to current @item class Nanoc::Item def toc require 'nokogiri' compiled_content = self.rep_named(:default).instance_eval { @content[:pre] } doc = Nokogiri::HTML(compiled_content) max_levels = 3 # begin toc res = '

Content

' # iterate through the body, find headers and build toc as we go along level = 0 doc.css("body").children.each do |node| if m = node.name.match(/^h(\d)$/) hlevel = m[1].to_i # nest lists diff = hlevel - level if diff > 0 res << '
    ' * diff elsif diff < 0 res << "
" * diff.abs end level = hlevel res << '
  • ' res << '' + node.text + '' res << '
  • ' end end # end toc res << '' res end end