Class: Generators::CHMGenerator

Class | Generators::CHMGenerator
In: | rdoc/generators/chm_generator.rb
Parent: | HTMLGenerator

### Methods

check_for_html_help_workshop compile_project create_contents_and_index create_help_project create_project_file for generate new

### Constants

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

### Public Class methods

for(options)

Standard generator factory

[Source]

    # File rdoc/generators/chm_generator.rb, line 10
        def CHMGenerator.for(options)
          CHMGenerator.new(options)
        end

new(*args)

[Source]

    # File rdoc/generators/chm_generator.rb, line 15
        def initialize(*args)
          super
          @op_name = @options.op_name || "rdoc"
          check_for_html_help_workshop
        end

### Public Instance methods

check_for_html_help_workshop()

[Source]

    # File rdoc/generators/chm_generator.rb, line 21
        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"

          exit 99
        end

compile_project()

Invoke the windows help compiler to compiler the project

[Source]

    # File rdoc/generators/chm_generator.rb, line 105
        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

[Source]

    # File rdoc/generators/chm_generator.rb, line 74
        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 = TemplatePage.new(RDoc::Page::CONTENTS)
          File.open("contents.hhc", "w") do |f|
            template.write_html_on(f, values)
          end

          values = { "index" => index }
          template = TemplatePage.new(RDoc::Page::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

[Source]

    # File rdoc/generators/chm_generator.rb, line 45
        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.

[Source]

    # File rdoc/generators/chm_generator.rb, line 54
        def create_project_file
          template = TemplatePage.new(RDoc::Page::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

[Source]

    # File rdoc/generators/chm_generator.rb, line 37
        def generate(info)
          super
          @project_name = @op_name + ".hhp"
          create_help_project
        end

[Validate]