Class: Generators::CHMGenerator

Inherits:
HTMLGenerator show all
Defined in:
lib/rdoc/generators/chm_generator.rb

Constant Summary collapse

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

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from HTMLGenerator

gen_url

Methods included from MarkUp

#cvs_url, #markup, #style_url

Constructor Details

#initialize(*args) ⇒ CHMGenerator

Returns a new instance of CHMGenerator.



15
16
17
18
19
# File 'lib/rdoc/generators/chm_generator.rb', line 15

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/generators/chm_generator.rb', line 10

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

Instance Method Details

#check_for_html_help_workshopObject



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

Invoke the windows help compiler to compiler the project



105
106
107
# File 'lib/rdoc/generators/chm_generator.rb', line 105

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



74
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
# File 'lib/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_projectObject

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



45
46
47
48
49
# File 'lib/rdoc/generators/chm_generator.rb', line 45

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/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) ⇒ Object

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



37
38
39
40
41
# File 'lib/rdoc/generators/chm_generator.rb', line 37

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