#!/usr/bin/env ruby require 'escape_utils' start_at_level = 2 headers = Hash.new(0) anchor = lambda { |title| href = title.downcase href.gsub!(/[^\w\- ]/, '') # remove punctuation href.gsub!(' ', '-') # replace spaces with dash href = EscapeUtils.escape_uri(href) # escape extended UTF-8 chars uniq = (headers[href] > 0) ? "-#{headers[href]}" : '' headers[href] += 1 href + uniq } ARGF.each_line do |line| if line =~ /^(#+) (.+?)#*$/ level = $1.size next if level < start_at_level title = $2.strip href = anchor.call title puts "%s* [%s](#%s)" % [ ' ' * (level - start_at_level), title, href ] end end