github.com/shyftnetwork/go-empyrean@v1.8.3-0.20191127201940-fbfca9338f04/shyft_documentation/lib/unique_head.rb (about) 1 # Unique header generation 2 require 'middleman-core/renderers/redcarpet' 3 require 'digest' 4 class UniqueHeadCounter < Middleman::Renderers::MiddlemanRedcarpetHTML 5 def initialize 6 super 7 @head_count = {} 8 end 9 def header(text, header_level) 10 friendly_text = text.gsub(/<[^<]+>/,"").parameterize 11 if friendly_text.strip.length == 0 12 # Looks like parameterize removed the whole thing! It removes many unicode 13 # characters like Chinese and Russian. To get a unique URL, let's just 14 # URI escape the whole header 15 friendly_text = Digest::SHA1.hexdigest(text)[0,10] 16 end 17 @head_count[friendly_text] ||= 0 18 @head_count[friendly_text] += 1 19 if @head_count[friendly_text] > 1 20 friendly_text += "-#{@head_count[friendly_text]}" 21 end 22 return "<h#{header_level} id='#{friendly_text}'>#{text}</h#{header_level}>" 23 end 24 end