From bbf2319da607be71daf41c399690820b15b1b4d9 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 9 Jun 2019 22:15:00 -0400 Subject: [PATCH] user guide: generate section numbers --- rb/gen_user_guide.rb | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/rb/gen_user_guide.rb b/rb/gen_user_guide.rb index 2e3aafb..87b21d2 100644 --- a/rb/gen_user_guide.rb +++ b/rb/gen_user_guide.rb @@ -18,9 +18,11 @@ end class Generator class Section attr_reader :name + attr_reader :new_page attr_reader :contents - def initialize(name) + def initialize(name, new_page) @name = name + @new_page = new_page @contents = "" end def append(contents) @@ -29,12 +31,21 @@ class Generator end def initialize(input, output_file, multi_file) - @sections = [Section.new("index")] + @sections = [Section.new("index", false)] + @current_section_number = [0] @lines = input.lines while @lines.size > 0 line = @lines.slice!(0) if line =~ /^```(.*)$/ @sections.last.append(gather_code_section($1)) + elsif line =~ /^(#+)(>)?\s*(.*)$/ + level_text, new_page_text, title_text = $1, $2, $3 + level = $1.size + new_page = !new_page_text.nil? + section_number = get_next_section_number(level) + section_title = "#{section_number} #{title_text}" + @sections << Section.new(section_title, new_page) + @sections.last.append("#{level_text} #{section_title}") else @sections.last.append(line) end @@ -42,7 +53,9 @@ class Generator renderer = Redcarpet::Render::HTML.new markdown = Redcarpet::Markdown.new(renderer) - content = markdown.render(@sections.last.contents) + content = @sections.map do |section| + markdown.render(section.contents) + end.join("\n") template = File.read("rb/assets/user_guide.html.erb") erb = ERB.new(template, nil, "<>") @@ -68,6 +81,18 @@ class Generator %[
\n
#{code}
\n
\n] end end + + def get_next_section_number(level) + if @current_section_number.size == level - 1 + @current_section_number << 1 + elsif @current_section_number.size >= level + @current_section_number[level - 1] += 1 + @current_section_number.slice!(level, @current_section_number.size) + else + raise "Section level change from #{@current_section_number.size} to #{level}" + end + @current_section_number.join(".") + end end input = load_file("doc/user_guide.md")