+ # Mapping between the type of a Doxygen element and the corresponding
+ # factory.
+ private var factories = new HashMap[String, HtmlElementFactory]
+
+ private var element_stack = new Array[HTMLTag]
+
+ # Does the next block have to be added to the detailed description?
+ private var in_detailed_description = false
+
+ redef fun listen_until(uri, local_name) do
+ super
+ if local_name == "briefdescription" then
+ in_detailed_description = false
+ else
+ in_detailed_description = true
+ end
+ end
+
+ redef fun start_dox_element(local_name, atts) do
+ super
+ var factory = factories.get_or_null(local_name)
+ if factory == null then return
+ element_stack.push(factory.create_element(local_name, atts))
+ end
+
+ redef fun end_dox_element(local_name) do
+ super
+ if not factories.has_key(local_name) then return
+ if element_stack.is_empty then return
+ var current_element = element_stack.pop
+ current_element.append(flush_buffer.trim)
+ if element_stack.is_empty then add_block(current_element.write_to_string)
+ end
+