# Unique header generation require 'middleman-core/renderers/redcarpet' require 'digest' class UniqueHeadCounter < Middleman::Renderers::MiddlemanRedcarpetHTML def initialize super @head_count = {} end def header(text, header_level) friendly_text = text.gsub(/<[^>]*>/,"").parameterize if friendly_text.strip.length == 0 # Looks like parameterize removed the whole thing! It removes many unicode # characters like Chinese and Russian. To get a unique URL, let's just # URI escape the whole header friendly_text = Digest::SHA1.hexdigest(text)[0,10] end @head_count[friendly_text] ||= 0 @head_count[friendly_text] += 1 if @head_count[friendly_text] > 1 friendly_text += "-#{@head_count[friendly_text]}" end return "#{text}" end end