diff --git a/bin/rocco b/bin/rocco index 8814ee4..8684804 100755 --- a/bin/rocco +++ b/bin/rocco @@ -7,6 +7,7 @@ #/ -c, --comment-chars= #/ The string to recognize as a comment marker #/ -o, --output= Directory where generated HTML files are written +#/ -t, --template= The file to use as template when rendering HTML #/ --help Show this help message require 'optparse' @@ -37,6 +38,7 @@ ARGV.options { |o| o.on("-o", "--output=DIR") { |dir| output_dir = dir } o.on("-l", "--language=LANG") { |lang| options[:language] = lang } o.on("-c", "--comment-chars=CHARS") { |chars| options[:comment_chars] = Regexp.escape(chars) } + o.on("-t", "--template=TEMPLATE") { |template| options[:template_file] = template } o.on_tail("-h", "--help") { usage($stdout, 0) } o.parse! } or abort_with_note diff --git a/lib/rocco.rb b/lib/rocco.rb index 655d6c4..7abda79 100644 --- a/lib/rocco.rb +++ b/lib/rocco.rb @@ -82,10 +82,12 @@ class Rocco defaults = { :language => 'ruby', :comment_chars => '#', + :template_file => nil } @options = defaults.merge(options) @sources = sources @comment_pattern = Regexp.new("^\\s*#{@options[:comment_chars]}\s?") + @template_file = @options[:template_file] @sections = highlight(split(parse(@data))) end @@ -102,10 +104,14 @@ class Rocco # for building an index of other files. attr_reader :sources + # An absolute path to a file that ought be used as a template for the + # HTML-rendered documentation. + attr_reader :template_file + # Generate HTML output for the entire document. require 'rocco/layout' def to_html - Rocco::Layout.new(self).render + Rocco::Layout.new(self, @template_file).render end #### Internal Parsing and Highlighting diff --git a/lib/rocco/layout.rb b/lib/rocco/layout.rb index 5ad61dd..7b790f0 100644 --- a/lib/rocco/layout.rb +++ b/lib/rocco/layout.rb @@ -3,8 +3,11 @@ require 'mustache' class Rocco::Layout < Mustache self.template_path = File.dirname(__FILE__) - def initialize(doc) + def initialize(doc, file=nil) @doc = doc + if not file.nil? + Rocco::Layout.template_file = file + end end def title @@ -15,9 +18,15 @@ class Rocco::Layout < Mustache num = 0 @doc.sections.map do |docs,code| { - :docs => docs, - :code => code, - :num => (num += 1) + :docs => docs, + :docs? => !docs.empty?, + :header? => /^.+<\/h.>$/.match( docs ), + + :code => code, + :code? => !code.empty?, + + :empty? => ( code.empty? && docs.empty? ), + :num => (num += 1) } end end