summaryrefslogtreecommitdiff
path: root/lib/rdoc/generators/chm.rb
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-01-13 03:02:49 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-01-13 03:02:49 +0000
commit937b7ab8b59346f02da81ef324b8955b01d7cc25 (patch)
tree3520d4f92a4fc3f01816d950cc503b7639239c41 /lib/rdoc/generators/chm.rb
parent513d0ca7f6c7c27c8f875a84d5b9a8f3692dbe8f (diff)
Reorganize RDoc generators
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15017 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rdoc/generators/chm.rb')
-rw-r--r--lib/rdoc/generators/chm.rb113
1 files changed, 113 insertions, 0 deletions
diff --git a/lib/rdoc/generators/chm.rb b/lib/rdoc/generators/chm.rb
new file mode 100644
index 0000000000..ce05d38d50
--- /dev/null
+++ b/lib/rdoc/generators/chm.rb
@@ -0,0 +1,113 @@
+require 'rdoc/generators/html'
+
+class RDoc::Generators::CHM < RDoc::Generators::HTML
+
+ HHC_PATH = "c:/Program Files/HTML Help Workshop/hhc.exe"
+
+ ##
+ # Standard generator factory
+
+ def self.for(options)
+ new(options)
+ end
+
+ def initialize(*args)
+ super
+ @op_name = @options.op_name || "rdoc"
+ check_for_html_help_workshop
+ end
+
+ def check_for_html_help_workshop
+ stat = File.stat(HHC_PATH)
+ rescue
+ $stderr <<
+ "\n.chm output generation requires that Microsoft's Html Help\n" <<
+ "Workshop is installed. RDoc looks for it in:\n\n " <<
+ HHC_PATH <<
+ "\n\nYou can download a copy for free from:\n\n" <<
+ " http://msdn.microsoft.com/library/default.asp?" <<
+ "url=/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp\n\n"
+ end
+
+ ##
+ # Generate the html as normal, then wrap it in a help project
+
+ def generate(info)
+ super
+ @project_name = @op_name + ".hhp"
+ create_help_project
+ end
+
+ ##
+ # The project contains the project file, a table of contents and an index
+
+ def create_help_project
+ create_project_file
+ create_contents_and_index
+ compile_project
+ end
+
+ ##
+ # The project file links together all the various
+ # files that go to make up the help.
+
+ def create_project_file
+ template = RDoc::TemplatePage.new @template::HPP_FILE
+ values = { "title" => @options.title, "opname" => @op_name }
+ files = []
+ @files.each do |f|
+ files << { "html_file_name" => f.path }
+ end
+
+ values['all_html_files'] = files
+
+ File.open(@project_name, "w") do |f|
+ template.write_html_on(f, values)
+ end
+ end
+
+ ##
+ # The contents is a list of all files and modules.
+ # For each we include as sub-entries the list
+ # of methods they contain. As we build the contents
+ # we also build an index file
+
+ def create_contents_and_index
+ contents = []
+ index = []
+
+ (@files+@classes).sort.each do |entry|
+ content_entry = { "c_name" => entry.name, "ref" => entry.path }
+ index << { "name" => entry.name, "aref" => entry.path }
+
+ internals = []
+
+ methods = entry.build_method_summary_list(entry.path)
+
+ content_entry["methods"] = methods unless methods.empty?
+ contents << content_entry
+ index.concat methods
+ end
+
+ values = { "contents" => contents }
+ template = RDoc::TemplatePage.new @template::CONTENTS
+ File.open("contents.hhc", "w") do |f|
+ template.write_html_on(f, values)
+ end
+
+ values = { "index" => index }
+ template = RDoc::TemplatePage.new @template::CHM_INDEX
+ File.open("index.hhk", "w") do |f|
+ template.write_html_on(f, values)
+ end
+ end
+
+ ##
+ # Invoke the windows help compiler to compiler the project
+
+ def compile_project
+ system(HHC_PATH, @project_name)
+ end
+
+end
+