Class: RDocF95::Generator::CHM

Inherits:
HTML
  • Object
show all
Defined in:
lib/rdoc-f95/generator/chm.rb

Defined Under Namespace

Modules: CHM

Constant Summary collapse

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ CHM

Returns a new instance of CHM.



14
15
16
17
18
# File 'lib/rdoc-f95/generator/chm.rb', line 14

def initialize(*args)
  super
  @op_name = @options.op_name || "rdoc"
  check_for_html_help_workshop
end

Class Method Details

.for(options) ⇒ Object

Standard generator factory



10
11
12
# File 'lib/rdoc-f95/generator/chm.rb', line 10

def self.for(options)
  new(options)
end

Instance Method Details

#check_for_html_help_workshopObject



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/rdoc-f95/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_projectObject

Invoke the windows help compiler to compiler the project



108
109
110
# File 'lib/rdoc-f95/generator/chm.rb', line 108

def compile_project
  system(HHC_PATH, @project_name)
end

#create_contents_and_indexObject

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



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/rdoc-f95/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 = RDocF95::TemplatePage.new @template::CONTENTS
  File.open("contents.hhc", "w") do |f|
    template.write_html_on(f, values)
  end

  values = { "index" => index }
  template = RDocF95::TemplatePage.new @template::CHM_INDEX
  File.open("index.hhk", "w") do |f|
    template.write_html_on(f, values)
  end
end

#create_help_projectObject

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



44
45
46
47
48
# File 'lib/rdoc-f95/generator/chm.rb', line 44

def create_help_project
  create_project_file
  create_contents_and_index
  compile_project
end

#create_project_fileObject

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



54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/rdoc-f95/generator/chm.rb', line 54

def create_project_file
  template = RDocF95::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) ⇒ Object

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



35
36
37
38
39
# File 'lib/rdoc-f95/generator/chm.rb', line 35

def generate(info)
  super
  @project_name = @op_name + ".hhp"
  create_help_project
end