X-Git-Url: http://nitlanguage.org
diff --git a/contrib/neo_doxygen/src/doxml/entitydef.nit b/contrib/neo_doxygen/src/doxml/entitydef.nit
index fd9ae68..0f83aa1 100644
--- a/contrib/neo_doxygen/src/doxml/entitydef.nit
+++ b/contrib/neo_doxygen/src/doxml/entitydef.nit
@@ -15,7 +15,7 @@
# Common SAX listeners for entity definitions.
module doxml::entitydef
-import doc
+import doc_listener
# Processes the content of an entity definition.
abstract class EntityDefListener
@@ -75,3 +75,55 @@ abstract class EntityDefListener
return location
end
end
+
+# Processes the content of a `` element.
+abstract class ParamListener[T: Parameter]
+ super EntityDefListener
+
+ # The current parameter.
+ var parameter: T is noinit
+
+ private var type_listener: TypeListener is noinit
+
+ init do
+ super
+ type_listener = new TypeListener(reader, self)
+ end
+
+ redef fun entity do return parameter
+
+ redef fun listen_until(uri, local_name) do
+ super
+ parameter = create_parameter
+ end
+
+ # Create a new parameter.
+ protected fun create_parameter: T is abstract
+
+ redef fun start_dox_element(local_name: String, atts: Attributes) do
+ if "declname" == local_name then
+ text.listen_until(dox_uri, local_name)
+ else if "type" == local_name then
+ type_listener.listen_until(dox_uri, local_name)
+ else
+ super
+ end
+ end
+
+ redef fun end_dox_element(local_name: String) do
+ if "declname" == local_name then
+ parameter.name = text.to_s
+ else if "type" == local_name then
+ source_language.apply_parameter_type(parameter, type_listener.linked_text)
+ else
+ super
+ end
+ end
+end
+
+# Processes the content of a `` element in a `` element.
+class TypeParamListener
+ super ParamListener[TypeParameter]
+
+ redef fun create_parameter do return new TypeParameter(graph)
+end