in jekyll/plugins/toc_builder_hook.rb [13:48]
def build_toc(site, toc_input)
toc = []
content = File.read(File.join(site.source, toc_input))
kramdown_config = site.config['kramdown'].merge({:html_to_native => true})
kramdown_doc = Kramdown::Document.new(content, kramdown_config)
parent_id = nil
kramdown_doc.root.children.each do |c|
item = extract_from_node(c, parent_id)
if not item.nil? then
toc.concat(item)
parent_id = item[0][:id] if item[0][:type] == :header
end
end
delete_list = []
(0).upto(toc.length-1) do |i|
item = toc[i]
prev = toc[i-1] != nil ? toc[i-1] : nil
item_is_header = (item[:type] != nil and item[:type] == :header)
prev_is_header = (prev != nil and prev[:type] != nil and prev[:type] == :header)
if item_is_header and prev_is_header
delete_list.push(i-1)
end
end
delete_list.each do |del_index|
toc.delete_at(del_index)
end
toc
end