<!--

  XML Document Type Definition for GNUstep Documentation Markup
  Language (gsdoc).

  Written by Richard Frith-Macdonald
  Based on GDML by 1997 Yoo C. Chung

  This is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2 of the License, or (at your option) any later version.

  This document is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Library General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free
  Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  Boston, MA 02111 USA.

-->


<!--
  gsdoc is an XML language - Typical usage:
  <?xml version="1.0"?>
  <!DOCTYPE gsdoc PUBLIC "-//GNUstep//DTD gsdoc 0.6.5//EN"
	"http://www.gnustep.org/gsdoc.xml">
  <gsdoc base="myDocName">
  </gsdoc>
-->


<!--***** Character entities. *****-->

<!-- General purpose characters for gsdoc. -->
<!ENTITY copy "&#38;copy;">	<!-- copyright symbol -->
<!ENTITY tm   "&#38;trade;">	<!-- trademark symbol -->
<!ENTITY dots "&#38;dots;">	<!-- ellipsis (...) -->
<!ENTITY nbsp "&#38;nbsp;">	<!-- non breakable space -->
<!ENTITY amp  "&#38;#38;">	<!-- ampersand -->
<!ENTITY apos "&#39;">		<!-- apos -->
<!ENTITY quot "&#34;">		<!-- quotation mark (") -->
<!ENTITY lt   "&#38;#60;">	<!-- lesser than symbol -->
<!ENTITY gt   "&#62;">		<!-- greater than symbol -->

<!--***** Entity declarations. *****-->

<!-- Boolean values for attributes -->
<!ENTITY % boolean "(yes|no)">

<!-- Entity for phrase elements. -->
<!ENTITY % phrase "var | em | code | strong | file | site">

<!-- Entity for cross references. -->
<!ENTITY % xref "ref | uref | url | email">

<!-- Entity for anchors. -->
<!ENTITY % anchor "label | entry">

<!-- Entity for text level elements. -->
<!ENTITY % text "#PCDATA | %xref; | %anchor; | %phrase; | footnote">

<!-- Entity for definition elements. -->
<!ENTITY % def "class|category|protocol|function|macro|type|variable">

<!-- Entity for list elements. -->
<!ENTITY % list "list | enum | deflist | qalist">

<!-- Entity for block elements like paragraphs. -->
<!ENTITY % block "%def; | %list; | p | example | embed">

<!--**********-->


<!-- Used for describing something. -->
<!ELEMENT desc (%text; | %list; | p | example | embed)*>

<!-- A footnote. -->
<!ELEMENT footnote (%text;)*>


<!--***** Phrase elements. *****-->

<!-- The content is a metasyntactic variable name. -->
<!ELEMENT var (%text;)*>

<!-- Emphasize the content. -->
<!ELEMENT em (%text;)*>

<!-- The content is too important that simple emphasizing isn't
     enough. -->
<!ELEMENT strong (%text;)*>

<!-- The content is either a name for code (e.g. class names), or a
     relatively short code fragment. -->
<!ELEMENT code (%text;)*>

<!-- The content is a file name. -->
<!ELEMENT file (#PCDATA)*>

<!-- The content is a fully qualified domain name on the Internet. -->
<!ELEMENT site (#PCDATA)*>

<!--***** List elements. *****-->

<!-- An item in a list. -->
<!ELEMENT item (%text; | %block;)*>

<!-- An enumerated list. -->
<!ELEMENT enum (item+)>

<!-- A ordinary, unnumbered list. -->
<!ELEMENT list (item+)>

<!-- A term to defined in a definition list. -->
<!ELEMENT term (%text;)*>

<!-- A definition list. -->
<!ELEMENT deflist (term, desc)+>

<!-- A question for a question and answer list. -->
<!ELEMENT question (%text;)*>

<!-- An answer for a question and answer list. -->
<!ELEMENT answer (%block;)*>

<!-- A question and answer list. -->
<!ELEMENT qalist (question, answer)+>

<!--**********-->


<!--***** Cross references. *****-->

<!-- A reference.
 ID of the reference.
 TYPE of reference, if implied, a reference to a label.
 CLASS specific class for a method
-->
<!ELEMENT ref (%text;)*>
<!ATTLIST ref
  id CDATA #REQUIRED
  type (class|protocol|method|function|type|macro|variable|label) "label"
  class CDATA #IMPLIED
>

<!-- An e-mail address. -->
<!ELEMENT email (%text;)*>
<!ATTLIST email
  address CDATA #IMPLIED
>

<!-- A URL. -->
<!ELEMENT url EMPTY>
<!ATTLIST url
  url CDATA #IMPLIED
>

<!-- A reference to a URL.
  The text contained appears in the output.
-->
<!ELEMENT uref (%text;)*>
<!ATTLIST uref
  url CDATA #REQUIRED
>


<!--***** Anchors. *****-->

<!-- An anchor for a general reference.
 The text contained appears in the ouput.
-->
<!ELEMENT label (%text;)*>
<!ATTLIST label
  id CDATA #REQUIRED
>

<!-- An entry for the general index. 
  The text that is contained appears in the index, and never in
  the text itself.
-->
<!ELEMENT entry (%text;)*>
<!ATTLIST entry
  id CDATA #REQUIRED
>

<!-- Entity for standard elements. -->
<!ELEMENT GNUstep EMPTY>
<!ELEMENT OpenStep EMPTY>
<!ELEMENT NotOpenStep EMPTY>
<!ELEMENT MacOS-X EMPTY>
<!ELEMENT NotMacOS-X EMPTY>

<!-- A standard that something is or isn't  compliant with. -->
<!ENTITY % standard "GNUstep | OpenStep | NotOpenStep | MacOS-X | NotMacOS-X">

<!ELEMENT standards (%standard;)*>

<!--***** Argument elements. *****-->

<!-- An argument. -->
<!ELEMENT arg (#PCDATA)*>
<!ATTLIST arg
  type CDATA #IMPLIED
>

<!-- Denotes that the rest of the arguments is a variable list,
  like in printf().
-->
<!ELEMENT vararg EMPTY>


<!--***** Method elements. *****-->

<!-- A component for a method selector. -->
<!ELEMENT sel (#PCDATA)*>

<!-- A method.  If there is no DESC, it is understood that the element
     is used to override some information from the same method in the
     superclass.
  If factory not set, instance method
-->
<!ELEMENT method (((sel, arg?), (sel, arg)*, vararg?), desc?, standards?)>
<!ATTLIST method
  id CDATA #IMPLIED
  type CDATA #IMPLIED
  factory %boolean; "no"
  init %boolean; "no"
  override (subclass|never) #IMPLIED
  role (alloc|init|dealloc|copy|mcopy) #IMPLIED
>


<!--***** Elements for definitions of classes, functions, etc. *****-->

<!-- Show what header file something lives in. -->
<!ELEMENT declared (#PCDATA)*>

<!-- A macro definition. -->
<!ELEMENT macro ((arg*, vararg?), declared?, desc?, standards?)>
<!ATTLIST macro
  id CDATA #IMPLIED
  name CDATA #REQUIRED
>

<!ELEMENT typespec (#PCDATA)*>

<!-- A type definition. -->
<!ELEMENT type (typespec, declared?, desc?, standards?)>
<!ATTLIST type
  id CDATA #IMPLIED
  name CDATA #REQUIRED
>

<!-- Variable definition.
  VALUE may be set for a constant or a default value
-->
<!ELEMENT variable (declared?, desc?, standards?)>
<!ATTLIST variable
  id CDATA #IMPLIED
  name CDATA #REQUIRED
  type CDATA #REQUIRED
  value CDATA #IMPLIED
  role (except|defaults|notify|key) #IMPLIED
>

<!-- A function definition. -->
<!ELEMENT function ((arg*, vararg?), declared?, desc?, standards?)>
<!ATTLIST function
  id CDATA #IMPLIED
  name CDATA #REQUIRED
  type CDATA #REQUIRED
>

<!-- Protocol definition. -->
<!ELEMENT protocol (declared?, desc?, method*, standards?)>
<!ATTLIST protocol
  id CDATA #IMPLIED
  name CDATA #REQUIRED
>

<!-- Category definition. -->
<!ELEMENT category (declared?, desc?, method*, standards?)>
<!ATTLIST category
  id CDATA #IMPLIED
  name CDATA #REQUIRED
  class CDATA #REQUIRED
>

<!-- Show a protocol a class conforms to. -->
<!ELEMENT conform (#PCDATA)*>

<!ELEMENT class (declared?, conform*, desc?, method*, standards?)>
<!ATTLIST class
  id CDATA #IMPLIED
  name CDATA #REQUIRED
  super CDATA #IMPLIED
>


<!--***** Elements for ordinary block level elements. *****-->

<!-- A paragraph. -->
<!ELEMENT p (%text;)*>

<!-- An example. -->
<!ELEMENT example (#PCDATA)*>
<!ATTLIST example
  id CDATA #IMPLIED
  caption CDATA #IMPLIED
>

<!-- An embedded object.  If it is of a type that the SGML processor
  cannot handle, then use the content, which is ignored otherwise.
  refer - method of referring to object (default is file)
  src - the reference to the object
  type - Internet media type of the objec
  title - optional title describing object
-->
<!ELEMENT embed (%block;)*>
<!ATTLIST embed
  id CDATA #IMPLIED
  refer (file|url) #IMPLIED
  src CDATA #REQUIRED
  type CDATA #IMPLIED
  title CDATA #IMPLIED
>

<!--***** Elements for document structure such as chapters. *****-->

<!-- A heading for chapters, sections, ... -->
<!ELEMENT heading (%text;)*>

<!-- A subsubsection. -->
<!ELEMENT subsubsect (heading, (%block;)*)>
<!ATTLIST subsubsect
  id CDATA #IMPLIED
>

<!-- A subsection. -->
<!ELEMENT subsect (heading, (%block;)*, subsubsect*)>
<!ATTLIST subsect
  id CDATA #IMPLIED
>

<!-- A section. -->
<!ELEMENT section (heading, (%block;)*, subsect*)>
<!ATTLIST section
  id CDATA #IMPLIED
>

<!-- A chapter. -->
<!ELEMENT chapter (heading, (%block;)*, section*)>
<!ATTLIST chapter
  id CDATA #IMPLIED
>


<!--***** Elements that make searching for things easier. *****-->

<!-- Table of contents. -->
<!ELEMENT contents EMPTY>

<!-- Index -->
<!ELEMENT index EMPTY>
<!ATTLIST index
  type (class|protocol|method|function|type|macro|variable|label) "label"
>


<!--***** Elements that describe the document itself. *****-->

<!-- Copyright of the document. -->
<!ELEMENT copy (%text;)*>

<!-- An abstract. -->
<!ELEMENT abstract (%text;)*>

<!-- The version of the document. -->
<!ELEMENT version (%text;)*>

<!-- The date the document was written. -->
<!ELEMENT date (%text;)*>

<!-- An author. -->
<!ELEMENT author (email?, url?, desc?)>
<!ATTLIST author
  name CDATA #REQUIRED
>

<!-- The title of the document. -->
<!ELEMENT title (%text;)*>


<!--***** The topmost structures for the document body. *****-->

<!-- Unnumbered parts appearing in the front, such as a preface. -->
<!ELEMENT front (contents?, chapter*)>

<!-- Unnumbered parts appearing in the back, such as an afterword or
 indices.
-->
<!ELEMENT back (chapter*, index?)>


<!--***** The topmost structures for the document. *****-->

<!-- The head containing general information about the document. -->
<!ELEMENT head (title, author+, version?, date?, abstract?, copy?)>

<!-- The main part of the document. -->
<!ELEMENT body (front?, chapter+, back?)>

<!--**********-->


<!-- The entire document. -->
<!ELEMENT gsdoc (head, body)>
<!ATTLIST gsdoc
  base CDATA #IMPLIED
  next CDATA #IMPLIED
  prev CDATA #IMPLIED
  up CDATA #IMPLIED
>

