<!ELEMENT apispec (template|api)+>

<!ELEMENT api (category*, function*)>
<!ELEMENT category EMPTY>
<!ELEMENT function EMPTY>

<!ELEMENT template (proto, desc*)>
<!ELEMENT proto (return, (param|vector)*)>
<!ELEMENT return EMPTY>
<!ELEMENT param EMPTY>
<!ELEMENT vector (param*)>
<!ELEMENT desc ((value|range)*, desc*)>
<!ELEMENT value EMPTY>
<!ELEMENT range EMPTY>

<!ATTLIST api      name                NMTOKEN #REQUIRED
                   implementation      (true | false) "false">
<!ATTLIST category name                NMTOKEN #REQUIRED>
<!ATTLIST function name                NMTOKEN #REQUIRED
                   default_prefix      NMTOKEN "_mesa_"
                   external            (true | false) "false"
                   template            NMTOKEN #REQUIRED
                   gltype              CDATA #IMPLIED
                   vector_size         NMTOKEN #IMPLIED
                   expand_vector       (true | false) "false"
                   skip_desc           (true | false) "false">

<!ATTLIST template name                NMTOKEN #REQUIRED
                   direction           (set | get) "set">

<!ATTLIST return   type                CDATA #REQUIRED>
<!ATTLIST param    name                NMTOKEN #REQUIRED
                   type                CDATA #REQUIRED
                   hide_if_expanded    (true | false) "false"
                   category            NMTOKEN #IMPLIED>
<!ATTLIST vector   name                NMTOKEN #REQUIRED
                   type                CDATA #REQUIRED
                   size                NMTOKEN #REQUIRED
                   category            NMTOKEN #IMPLIED>

<!ATTLIST desc     name                NMTOKEN #REQUIRED
                   vector_size         CDATA #IMPLIED
                   convert             (true | false) #IMPLIED
                   error               NMTOKEN "GL_INVALID_ENUM"
                   category            NMTOKEN #IMPLIED>

<!ATTLIST value    name                CDATA #REQUIRED
                   category            NMTOKEN #IMPLIED>
<!ATTLIST range    from                NMTOKEN #REQUIRED
                   to                  NMTOKEN #REQUIRED
                   base                NMTOKEN #IMPLIED
                   category            NMTOKEN #IMPLIED>
