#!/usr/bin/env ruby require "erb" require "fileutils" require "redcarpet" require "syntax" require "syntax/convertors/html" require "rscons/version" def load_file(file_name) contents = File.read(file_name) contents.gsub(/\$\{include (.*?)\}/) do |match| include_file_name = $1 File.read(include_file_name) end end class Generator class Section attr_reader :number attr_reader :title attr_reader :new_page attr_reader :contents attr_reader :anchor def initialize(number, title, new_page) @number = number @title = title.gsub(/[`]/, "") @new_page = new_page @contents = "" @anchor = "s" + ("#{number} #{title}").gsub(/[^a-zA-Z0-9]/, "_") end def append(contents) @contents += contents end end def initialize(input, output_file, multi_file) @sections = [] @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) @sections << Section.new(section_number, title_text, new_page) @sections.last.append("#{level_text} #{section_number} #{title_text}") elsif @sections.size > 0 @sections.last.append(line) end end renderer = Redcarpet::Render::HTML.new @markdown_renderer = Redcarpet::Markdown.new(renderer) content = %[
#{code}\n