From ffe7a77b72e53d3b5a9a3dcb436d548f303e16f3 Mon Sep 17 00:00:00 2001 From: jonnosan Date: Thu, 26 Mar 2009 04:03:48 +0000 Subject: [PATCH] add script to auto-create ip65 library docs git-svn-id: http://svn.code.sf.net/p/netboot65/code@57 93682198-c243-4bdb-bd91-e943c89aac3b --- dist/document_ca65_source_as_html.rb | 328 +++++++++++++++++++++++++++ 1 file changed, 328 insertions(+) create mode 100644 dist/document_ca65_source_as_html.rb diff --git a/dist/document_ca65_source_as_html.rb b/dist/document_ca65_source_as_html.rb new file mode 100644 index 0000000..f117aef --- /dev/null +++ b/dist/document_ca65_source_as_html.rb @@ -0,0 +1,328 @@ +def document_ca65_source_as_html(codebase_dir,codebase_title,output_dir) + + + +Dir.mkdir(output_dir) unless File.exist?(output_dir) + +symbol_attributes={} +html_filenames={} +file_overviews={} + + +puts "generating documentation for #{codebase_title}" + +documentation_title="#{codebase_title} technical reference" +require 'find' + +files_to_parse=[] +Find.find(codebase_dir) do |path| + Find.prune if path[0]=='.' + files_to_parse <"stylesheet", :href=>"ca65-doc-style.css",:type=>"text/css") + end + body do + h2 "#{symbol_type}s" + table do + tr do + th "#{symbol_type}" + th "defined in" + end + symbol_names.each do |symbol| + if symbol_attributes[symbol][:type]==symbol_type then + tr do + td symbol + count=0 + td do + symbol_attributes[symbol][:defined_in].each do |filename| + count+=1 + text ", " unless count==1 + a(:href=>"#{html_filenames[filename]}##{symbol_type}s", :target=>"docwin"){filename} + source_files<"stylesheet", :href=>"ca65-doc-style.css",:type=>"text/css") + end + + body do + h1 "#{documentation_title}" + + h2 "files" + table do + tr do + th "file" + th "symbols" + end + source_files.sort.each do |filename| + tr do + td {a(:href=>"#{html_filenames[filename]}", :target=>"docwin"){filename}} + symbols_in_file=(symbol_names.collect{|symbol| symbol_attributes[symbol][:defined_in].include?(filename) ? symbol:nil}).compact + td symbols_in_file.join(", ") + end + end + end + end +end +File.open("#{output_dir}/ref_index.html","w") <"stylesheet", :href=>"ca65-doc-style.css",:type=>"text/css") + end + body do + a(:href=>"ref_index.html") { h1 documentation_title} + h1 "File : #{filename}" + pre file_overviews[filename] if file_overviews[filename].length>1 + + if functions_in_file.length>0 then + h2(:id=>"functions") {"functions"} + table do + tr do + th{"function"} + th{"description"} + end + functions_in_file.each do |symbol| + tr do + td(:id=>symbol){symbol} + td{pre symbol_attributes[symbol][:comment][filename] unless symbol_attributes[symbol][:comment].nil?} + end + end + end + end + + if variables_in_file.length>0 then + h2(:id=>"variables"){"variables"} + table do + tr do + th{"variable"} + th{"description"} + th{"size (bytes)"} + end + variables_in_file.each do |symbol| + tr do + td(:id=>symbol){symbol} + td{symbol_attributes[symbol][:comment][filename] unless symbol_attributes[symbol][:comment].nil?} + td{symbol_attributes[symbol][:size][filename] unless symbol_attributes[symbol][:size].nil?} + end + end + end + + end + + if constants_in_file.length>0 then + h2(:id=>"constants") {"constants"} + table do + tr do + th{"constants"} + th{"description"} + th{"value"} + end + constants_in_file.each do |symbol| + tr do + td(:id=>symbol){symbol} + td{symbol_attributes[symbol][:comment][filename] unless symbol_attributes[symbol][:comment].nil?} + td{symbol_attributes[symbol][:value][filename] unless symbol_attributes[symbol][:value].nil?} + end + end + end + + end + h2{ "implementation"} + pre(:id=>:code) {File.open("#{codebase_dir}/#{filename}").read.gsub("\t"," ")} + end + end + + File.open("#{output_dir}/#{html_filenames[filename]}","w") < + + + + + #{documentation_title} + + + + + + + + + + +EOF + +end + + + +if __FILE__ == $0 then + #run from command line + codebase_dir=Dir.pwd + output_dir="doc" + codebase_title=File.basename(codebase_dir) + document_ca65_source_as_html(codebase_dir,codebase_title,output_dir) +end \ No newline at end of file