Skip to content

Instantly share code, notes, and snippets.

@long-long-float
Created December 22, 2015 13:42
Show Gist options
  • Save long-long-float/6390e6d74421618602a0 to your computer and use it in GitHub Desktop.
Save long-long-float/6390e6d74421618602a0 to your computer and use it in GitHub Desktop.
Markdownの目次を作るスクリプト
#!/usr/bin/env ruby
TITLE_REGEXP = /(#+) (.+)/
text = File.read(ARGV[0]).split("\n")
numbers = []
counts = Array.new(6){ 0 }
prev_level = 0
text.each do |line|
TITLE_REGEXP.match(line) do |m|
level = m[1].size - 2
content = m[2]
if level < prev_level
(level + 1).upto(prev_level) do |i|
counts[i] = 0
end
end
next if level < 0 # top level
counts[level] += 1
number = counts.take(level + 1).join('.')
numbers << number
puts "* [#{number} #{content}](#anchor#{number})"
prev_level = level
end
end
puts
text.each do |line|
is_title = TITLE_REGEXP.match(line) do |m|
level = m[1].size
if level == 1
puts line
else
number = numbers.shift
puts <<-EOS
<a id="anchor#{number}"></a>
#{m[1]} <a href="#anchor#{number}">#{m[2]}</a>
EOS
end
true
end
unless is_title
puts line
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment