# File lib/puppet/util/rdoc/generators/puppet_generator.rb, line 82
 82:     def build_indices
 83:       @allfiles = []
 84:       @nodes = []
 85:       @plugins = []
 86: 
 87:       # contains all the seen modules
 88:       @modules = {}
 89:       @allclasses = {}
 90: 
 91:       # remove unknown toplevels
 92:       # it can happen that RDoc triggers a different parser for some files (ie .c, .cc or .h)
 93:       # in this case RDoc generates a RDoc::TopLevel which we do not support in this generator
 94:       # So let's make sure we don't generate html for those.
 95:       @toplevels = @toplevels.select { |tl| tl.is_a? RDoc::PuppetTopLevel }
 96: 
 97:       # build the modules, classes and per modules classes and define list
 98:       @toplevels.each do |toplevel|
 99:         next unless toplevel.document_self
100:         file = HtmlFile.new(toplevel, @options, FILE_DIR)
101:         classes = []
102:         methods = []
103:         modules = []
104:         nodes = []
105: 
106:         # find all classes of this toplevel
107:         # store modules if we find one
108:         toplevel.each_classmodule do |k|
109:           generate_class_list(classes, modules, k, toplevel, CLASS_DIR)
110:         end
111: 
112:         # find all defines belonging to this toplevel
113:         HtmlMethod.all_methods.each do |m|
114:           # find parent module, check this method is not already
115:           # defined.
116:           if m.context.parent.toplevel === toplevel
117:             methods << m
118:           end
119:         end
120: 
121:         classes.each do |k|
122:           @allclasses[k.index_name] = k if !@allclasses.has_key?(k.index_name)
123:         end
124: 
125:         # generate nodes and plugins found
126:         classes.each do |k|
127:           if k.context.is_module?
128:             k.context.each_node do |name,node|
129:               nodes << HTMLPuppetNode.new(node, toplevel, NODE_DIR, @options)
130:               @nodes << nodes.last
131:             end
132:             k.context.each_plugin do |plugin|
133:               @plugins << HTMLPuppetPlugin.new(plugin, toplevel, PLUGIN_DIR, @options)
134:             end
135:             k.context.each_fact do |fact|
136:               @plugins << HTMLPuppetPlugin.new(fact, toplevel, PLUGIN_DIR, @options)
137:             end
138:           end
139:         end
140: 
141:         @files << file
142:         @allfiles << { "file" => file, "modules" => modules, "classes" => classes, "methods" => methods, "nodes" => nodes }
143:       end
144: 
145:       # scan all classes to create the childs references
146:       @allclasses.values.each do |klass|
147:         if superklass = klass.context.superclass
148:           if superklass = AllReferences[superklass] and (superklass.is_a?(HTMLPuppetClass) or superklass.is_a?(HTMLPuppetNode))
149:             superklass.context.add_child(klass.context)
150:           end
151:         end
152:       end
153: 
154:       @classes = @allclasses.values
155:     end