Sha256: e71f03d4b5a47146ba14b4cd6bdf94ba9589f26843ec9c14b35db8c02a34577b
Contents?: true
Size: 1.06 KB
Versions: 1
Compression:
Stored size: 1.06 KB
Contents
module HTML class Pipeline # HTML filter that adds a 'name' attribute to all headers # in a document, so they can be accessed from a table of contents # # TODO: besides adding the name attribute, we should get around to # eventually generating the Table of Contents itself, with links # to each header class TableOfContentsFilter < Filter PUNCTUATION_REGEXP = RUBY_VERSION > "1.9" ? /[^\p{Word}\- ]/u : /[^\w\- ]/ def call headers = Hash.new(0) doc.css('h1, h2, h3, h4, h5, h6').each do |node| name = node.text.downcase name.gsub!(PUNCTUATION_REGEXP, '') # remove punctuation name.gsub!(' ', '-') # replace spaces with dash uniq = (headers[name] > 0) ? "-#{headers[name]}" : '' headers[name] += 1 if header_content = node.children.first header_content.add_previous_sibling(%Q{<a name="#{name}#{uniq}" class="anchor" href="##{name}#{uniq}"><span class="octicon octicon-link"></span></a>}) end end doc end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
html-pipeline-0.1.0 | lib/html/pipeline/toc_filter.rb |