Class RDoc::Generator::CHM

  1. lib/rdoc/generator/chm.rb
ClassModule NormalModule AnonClass SingleClass NormalClass AnyMethod GhostMethod MetaMethod CodeObject Context Alias Attr Constant Require Include TopLevel RubyLex IRB RuntimeError Error Error Token TkUnknownChar TkVal TkNode TkOp TkId TkError TkOPASGN TkKW AttributeFormatter HtmlFormatter OverstrikeFormatter AnsiFormatter NamedThing AliasName IncludedModule Constant Attribute MethodSummary DefaultDisplay ClassEntry TopLevelEntry Formatter SimpleFormatter Description MethodDescription ModuleDescription ClassDescription HTML XML HTMLInOne CHM Method Context Class File Generator::MarkUp TEXINFO SimpleElement Port Element Node Subgraph Edge Digraph Stats Parser Options RDoc TemplatePage Markup Diagram NameDescriptor Cache Reader Writer Driver MethodEntry RI TexinfoTemplate AllReferences RubyToken Display Paths RI MarkUp Generator TokenStream DOT RDoc dot/f_5.png

Classes and Modules

Module RDoc::Generator::CHM::CHM

Constants

HHC_PATH = "c:/Program Files/HTML Help Workshop/hhc.exe"

Public class methods

for (options)

Standard generator factory

[show source]
# File lib/rdoc/generator/chm.rb, line 10
  def self.for(options)
    new(options)
  end
new (*args)
[show source]
# File lib/rdoc/generator/chm.rb, line 14
  def initialize(*args)
    super
    @op_name = @options.op_name || "rdoc"
    check_for_html_help_workshop
  end

Public instance methods

check_for_html_help_workshop ()
[show source]
# File lib/rdoc/generator/chm.rb, line 20
  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
compile_project ()

Invoke the windows help compiler to compiler the project

[show source]
# File lib/rdoc/generator/chm.rb, line 108
  def compile_project
    system(HHC_PATH, @project_name)
  end
create_contents_and_index ()

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

[show source]
# File lib/rdoc/generator/chm.rb, line 75
  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
create_help_project ()

The project contains the project file, a table of contents and an index

[show source]
# File lib/rdoc/generator/chm.rb, line 44
  def create_help_project
    create_project_file
    create_contents_and_index
    compile_project
  end
create_project_file ()

The project file links together all the various files that go to make up the help.

[show source]
# File lib/rdoc/generator/chm.rb, line 54
  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
generate (info)

Generate the html as normal, then wrap it in a help project

[show source]
# File lib/rdoc/generator/chm.rb, line 35
  def generate(info)
    super
    @project_name = @op_name + ".hhp"
    create_help_project
  end