Class: Generators::XMLGenerator

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

Overview

Generate XML output as one big file

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) ⇒ XMLGenerator

Returns a new instance of XMLGenerator.



21
22
23
# File 'lib/rdoc/generators/xml_generator.rb', line 21

def initialize(*args)
  super
end

Class Method Details

.for(options) ⇒ Object

Standard generator factory



16
17
18
# File 'lib/rdoc/generators/xml_generator.rb', line 16

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

Instance Method Details

#build_class_list(from, html_file, class_dir) ⇒ Object



61
62
63
64
65
66
# File 'lib/rdoc/generators/xml_generator.rb', line 61

def build_class_list(from, html_file, class_dir)
  @classes << HtmlClass.new(from, html_file, class_dir, @options)
  from.each_classmodule do |mod|
    build_class_list(mod, html_file, class_dir)
  end
end

#build_indicesObject

Generate:

  • a list of HtmlFile objects for each TopLevel object.

  • a list of HtmlClass objects for each first level class or module in the TopLevel objects

  • a complete list of all hyperlinkable terms (file, class, module, and method names)



50
51
52
53
54
55
56
57
58
59
# File 'lib/rdoc/generators/xml_generator.rb', line 50

def build_indices

  @info.each do |toplevel|
    @files << HtmlFile.new(toplevel, @options, FILE_DIR)
  end

  RDoc::TopLevel.all_classes_and_modules.each do |cls|
    build_class_list(cls, @files[0], CLASS_DIR)
  end
end

#gen_an_index(collection, title) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/rdoc/generators/xml_generator.rb', line 113

def gen_an_index(collection, title)
  res = []
  collection.sort.each do |f|
    if f.document_self
      res << { "href" => f.path, "name" => f.index_name }
    end
  end

  return {
    "entries" => res,
    'list_title' => title,
    'index_url'  => main_url,
  }
end

#gen_class_indexObject



104
105
106
# File 'lib/rdoc/generators/xml_generator.rb', line 104

def gen_class_index
  gen_an_index(@classes, 'Classes')
end

#gen_file_indexObject



100
101
102
# File 'lib/rdoc/generators/xml_generator.rb', line 100

def gen_file_index
  gen_an_index(@files, 'Files')
end

#gen_into(list) ⇒ Object



92
93
94
95
96
97
98
# File 'lib/rdoc/generators/xml_generator.rb', line 92

def gen_into(list)
  res = []
  list.each do |item|
    res << item.value_hash
  end
  res
end

#gen_method_indexObject



108
109
110
# File 'lib/rdoc/generators/xml_generator.rb', line 108

def gen_method_index
  gen_an_index(HtmlMethod.all_methods, 'Methods')
end

#generate(info) ⇒ Object

Build the initial indices and output objects based on an array of TopLevel objects containing the extracted information.



30
31
32
33
34
35
36
37
38
# File 'lib/rdoc/generators/xml_generator.rb', line 30

def generate(info)
  @info       = info
  @files      = []
  @classes    = []
  @hyperlinks = {}

  build_indices
  generate_xml
end

#generate_xmlObject

Generate all the HTML. For the one-file case, we generate all the information in to one big hash



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/rdoc/generators/xml_generator.rb', line 72

def generate_xml
  values = { 
    'charset' => @options.charset,
    'files'   => gen_into(@files),
    'classes' => gen_into(@classes)
  }
  
  # this method is defined in the template file
  write_extra_pages if defined? write_extra_pages

  template = TemplatePage.new(RDoc::Page::ONE_PAGE)

  if @options.op_name
    opfile = File.open(@options.op_name, "w")
  else
    opfile = $stdout
  end
  template.write_html_on(opfile, values)
end