<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- DTD describing the grammar used in doxygen's XML output -->
<!-- Version 0.1 December 25, 2001 -->
<!-- Defined by Angelo Hulshout, based on works of Dimitri van Heesch -->

<!-- standard character entities -->
<!ENTITY lt     "&#38;#60;">
<!ENTITY gt     "&#62;">
<!ENTITY amp    "&#38;#38;">
<!ENTITY apos   "&#39;">
<!ENTITY quot   "&#34;">

<!--
     Document root
-->
<!ELEMENT doxygen (compounddef)*>

<!--
    Compound related entities and elements
-->
<!ENTITY % compound-req.att
                       'id      ID                           #REQUIRED
                        kind    (group|file|namespace|
                                 class|struct|union|
                                 interface|dispinterface|
                                 valuetype|library)          #REQUIRED'
>
<!ENTITY % ref-req.att   'idref IDREF                        #REQUIRED'
>
<!ENTITY % inheritcompref-req.att
                         '%ref-req.att;
                          prot (public|protected|private)    #REQUIRED
                          virt (non-virtual|virtual)         #REQUIRED'
>

<!ELEMENT compounddef (compoundname,
                       basecompoundref*,
                       derivedcompoundref*,
                       sectiondef*,
                       briefdescription,
                       detaileddescription,
                       inheritancegraph?,
                       collaborationgraph?,
                       programlisting?,
                       sourcecode?,
                       location?
                      )
>
<!ATTLIST compounddef %compound-req.att;>

<!ELEMENT compoundname (#PCDATA)>

<!ELEMENT location (#PCDATA)>
<!ATTLIST location file CDATA #REQUIRED line CDATA #REQUIRED >

<!ELEMENT compoundref EMPTY>
<!ATTLIST compoundref %ref-req.att;>

<!ELEMENT basecompoundref EMPTY>
<!ATTLIST basecompoundref %inheritcompref-req.att;>

<!ELEMENT derivedcompoundref EMPTY>
<!ATTLIST derivedcompoundref %inheritcompref-req.att;>

<!ELEMENT memberdef (#PCDATA|type|name|briefdescription|detaileddescription|location|param|initializer|enumvalue)*>
<!ATTLIST memberdef kind (define|property|variable|typedef|enum|function|signal|prototype|friend|dcop|slot) #REQUIRED id CDATA #REQUIRED virt (normal|virtual|pure-virtual) #REQUIRED prot (public|protected|private) #REQUIRED>

<!ELEMENT briefdescription (#PCDATA|para)*>

<!ELEMENT detaileddescription (#PCDATA|para)*>

<!--
    Compound attributes related entities and elements
-->
<!-- required attributes for member sections -->
<!ENTITY % sec-req.att  'kind   (user
                                |public-type
                                |public-func
                                |public-attrib
                                |public-slot
                                |public-static-func
                                |public-static-attrib
                                |protected-type
                                |protected-func
                                |protected-attrib
                                |protected-slot
                                |protected-static-func
                                |protected-static-attrib
                                |private-type
                                |private-func
                                |private-attrib
                                |private-slot
                                |private-static-func
                                |private-static-attrib
                                |signal
                                |friend
                                |related
				|define|prototype|typedef|enum|func|var
	                        |dcop-func
                                |property
                                )                            #REQUIRED
                        '
>
<!ENTITY % mem-req.att  'id     ID                           #REQUIRED'>

<!-- optional attributes for function -->
<!ENTITY % func-opt.att 'virt   (virtual|pure-virtual)       #IMPLIED'>

<!ELEMENT memberref   (#PCDATA)>
<!ATTLIST memberref   %ref-req.att;>

<!ELEMENT sectionlist (sectiondef)+>

<!ELEMENT sectiondef  (memberdef|memberlist)*>
<!ATTLIST sectiondef  %sec-req.att;>

<!ELEMENT memberlist  (functiondef|variabledef|typedef|definedef|enumdef)+>

<!ELEMENT functiondef (type?,name,parameterlist)>
<!ATTLIST functiondef %mem-req.att; %func-opt.att;>

<!ELEMENT variabledef (type,name,array?,initializer?)>
<!ATTLIST variabledef %mem-req.att;>

<!ELEMENT parameterlist (title|parametername|parameterdescription)*>
<!ATTLIST parameterlist kind (param|retval|exception) #REQUIRED>

<!ELEMENT param (attributes?,type?,declname?,defname?,array?,defval?)>

<!ELEMENT parametername (#PCDATA)>

<!ELEMENT parameterdescription (#PCDATA|para)*>

<!ELEMENT defparameterlist (defarg)*>

<!ELEMENT defarg (#PCDATA)>

<!--
    Programming language declaration related entities and elements
-->
<!ELEMENT name (#PCDATA)>

<!ELEMENT typedef     (type,name)>
<!ATTLIST typedef     %mem-req.att;>

<!ELEMENT definedef   (name,defparameterlist?,initializer?)>
<!ATTLIST definedef   %mem-req.att;>

<!ELEMENT enumdef     (name,enumvaluelist)>
<!ATTLIST enumdef     %mem-req.att;>

<!ELEMENT slotdef     (type,name,parameterlist)>
<!ATTLIST slotdef     %mem-req.att;>

<!ELEMENT signaldef   (type,name,parameterlist)>
<!ATTLIST signaldef   %mem-req.att;>

<!ELEMENT enumvaluelist (enumvalue)*>

<!ELEMENT enumvalue (name,initializer?)>

<!ELEMENT declname (#PCDATA)>

<!ELEMENT defname (#PCDATA)>

<!ELEMENT type (#PCDATA|memberref|compoundref|compounddef|ref)*>

<!ELEMENT defval (#PCDATA|memberref|compoundref)*>

<!ELEMENT initializer (#PCDATA|memberref|compoundref|ref)*>

<!ELEMENT array (#PCDATA)>

<!ELEMENT attributes (#PCDATA)>

<!--
    Graph related entities and elements
-->
<!ELEMENT collaborationgraph (node)*>

<!ELEMENT inheritancegraph (node)*>

<!ELEMENT node (label|link|childnode)*>
<!ATTLIST node id CDATA #REQUIRED>

<!ELEMENT childnode (edgelabel)*>
<!ATTLIST childnode id CDATA #REQUIRED relation CDATA #REQUIRED>

<!ELEMENT label (#PCDATA)>

<!ELEMENT link EMPTY>
<!ATTLIST link id CDATA #REQUIRED>

<!ELEMENT edgelabel (#PCDATA)>

<!--
    Source code listing related entities and elements
-->
<!ELEMENT codeline (#PCDATA|highlight|ref)*>

<!ELEMENT linenumber (#PCDATA|anchor)*>
<!ATTLIST linenumber line CDATA #IMPLIED refid CDATA #IMPLIED>

<!ELEMENT sourcecode (linenumber|codeline|highlight|ref)*>

<!ELEMENT itemizedlist (listitem)*>

<!ELEMENT listitem (#PCDATA|para)*>

<!ELEMENT programlisting (#PCDATA|linenumber|codeline|linebreak|highlight)*>

<!--
    Hypertext related entities and elements
-->
<!ELEMENT ulink (#PCDATA)>
<!ATTLIST ulink url CDATA #REQUIRED>

<!ELEMENT anchor (ref)>
<!ATTLIST anchor id CDATA #REQUIRED>

<!ELEMENT ref (#PCDATA)>
<!ATTLIST ref idref CDATA #REQUIRED anchor CDATA #IMPLIED>

<!--
    Documentation layout entities and elements
-->
<!--ELEMENT highlight (#PCDATA|ref)*-->
<!ELEMENT highlight ANY>
<!ATTLIST highlight class (preprocessor|keyword|keywordtype|keywordflow|stringliteral|charliteral|comment) #REQUIRED>

<!ELEMENT linebreak EMPTY>

<!--ELEMENT simplesect (title|para)*-->
<!ELEMENT simplesect ANY>
<!ATTLIST simplesect kind (see|return|author|version|since|date|bug|note|warning|par|deprecated|pre|post|invariant|remark|attention|todo|test|rcs|enumvalues|examples) #REQUIRED>

<!--ELEMENT computeroutput (#PCDATA)-->
<!ELEMENT computeroutput ANY>

<!--ELEMENT emphasis (#PCDATA|ref)*-->
<!ELEMENT emphasis ANY>

<!--ELEMENT title (#PCDATA|ref)*-->
<!ELEMENT title ANY>

<!--ELEMENT para (#PCDATA|computeroutput|ref|emphasis|parameterlist|simplesect|ulink|programlisting|itemizedlist|linebreak)*-->
<!ELEMENT para ANY>

