Goto Chapter: | Top | 1 | 2 | 3 | 4 | 5 | A | B | Bib | Ind

### B. The File `gapdoc.dtd`

For easier reference we repeat here the complete content of the file `gapdoc.dtd`.

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!-- ==================================================================
         gapdoc.dtd - XML Document type definition for GAP documentation
         By Frank Lübeck and Max Neunhöffer
         ================================================================== -->

    <!-- $Id: gapdoc.dtd,v 1.5 2002/05/02 20:39:58 gap Exp $ -->

    <!-- Note that this definition goes "bottom-up" because entities can only
         be used after their definition in the file. -->

    <!-- ==================================================================
         Some entities:
         ================================================================== -->

    <!-- The standard XML entities: -->

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

    <!-- The following are necessary because these characters have special
         meanings in either XML or LaTeX: -->

    <!ENTITY tamp
      "<Alt Only='LaTeX'>\&amp;</Alt><Alt Not='LaTeX'><Alt Only='HTML'>&amp;amp;</Alt><Alt Not='HTML'>&amp;</Alt></Alt>">
    <!ENTITY tlt
      "<Alt Only='LaTeX'>{\textless}</Alt><Alt Not='LaTeX'><Alt Only='HTML'>&amp;lt;</Alt><Alt Not='HTML'>&lt;</Alt></Alt>">
    <!ENTITY tgt
      "<Alt Only='LaTeX'>{\textgreater}</Alt><Alt Not='LaTeX'><Alt Only='HTML'>&amp;gt;</Alt><Alt Not='HTML'>&gt;</Alt></Alt>">
    <!ENTITY hash "<Alt Only='LaTeX'>\#</Alt><Alt Not='LaTeX'>#</Alt>">
    <!ENTITY dollar "<Alt Only='LaTeX'>\$</Alt><Alt Not='LaTeX'>$</Alt>">
    <!ENTITY percent
      "<Alt Only='LaTeX'>\&#37;</Alt><Alt Not='LaTeX'>&#37;</Alt>">
    <!ENTITY tilde
      "<Alt Only='LaTeX'>{\textasciitilde}</Alt><Alt Not='LaTeX'>~</Alt>">
    <!ENTITY bslash
      "<Alt Only='LaTeX'>{\textbackslash}</Alt><Alt Not='LaTeX'>\</Alt>">
    <!ENTITY obrace "<Alt Only='LaTeX'>\{</Alt><Alt Not='LaTeX'>{</Alt>">
    <!ENTITY cbrace "<Alt Only='LaTeX'>\}</Alt><Alt Not='LaTeX'>}</Alt>">
    <!ENTITY uscore
      "<Alt Only='LaTeX'>{\textunderscore}</Alt><Alt Not='LaTeX'>_</Alt>">
    <!ENTITY circum
      "<Alt Only='LaTeX'>{\textasciicircum}</Alt><Alt Not='LaTeX'>^</Alt>">
    <!ENTITY nbsp "<Alt Only='LaTeX'>~</Alt><Alt Not='LaTeX'>&#160;</Alt>">

    <!-- ==================================================================
         Our predefined entities:
         ================================================================== -->

    <!ENTITY GAP    "<Package>GAP</Package>">
    <!ENTITY GAPDoc "<Package>GAPDoc</Package>">
    <!ENTITY TeX
      "<Alt Only='LaTeX'>{\TeX}</Alt><Alt Not='LaTeX'>TeX</Alt>">
    <!ENTITY LaTeX
      "<Alt Only='LaTeX'>{\LaTeX}</Alt><Alt Not='LaTeX'>LaTeX</Alt>">
    <!ENTITY BibTeX
      "<Alt Only='LaTeX'>{Bib\TeX}</Alt><Alt Not='LaTeX'>BibTeX</Alt>">
    <!ENTITY MeatAxe "<Package>MeatAxe</Package>">
    <!ENTITY XGAP   "<Package>XGAP</Package>">
    <!ENTITY copyright
      "<Alt Only='LaTeX'>{\copyright}</Alt><Alt Not='LaTeX'>(C)</Alt>">

    <!-- ==================================================================
         The following describes the "innermost" documentation text which
         can occur at various places in the document like for example
         section headings. It does neither contain further sectioning
         elements nor environments like Enums or Lists.
         ================================================================== -->

    <!ENTITY % InnerText "#PCDATA |
                          Alt |
                          Emph | E |
                          Par | P |
                          Keyword | K | Arg | A | Quoted | Q | Code | C |
                          File | F | Button | B | Package |
                          M | Math | Display |
                          Example | Listing | Log | Verb |
                          URL | Email | Homepage | Cite | Label |
                          Ref | Index" >

    <!ELEMENT Alt (%InnerText;)*>     <!-- This is only to allow "Only" and
                                           "Not" attributes for normal text -->
    <!ATTLIST Alt Only CDATA #IMPLIED
                  Not  CDATA #IMPLIED>

    <!-- The following elements declare a certain block of InnerText to
         have a certain property. They are non-terminal and can contain
         any InnerText recursively. -->

    <!ELEMENT Emph (%InnerText;)*>    <!-- Emphasize something -->
    <!ELEMENT E    (%InnerText;)*>    <!-- the same as shortcut -->

    <!-- The following is an empty element marking a paragraph boundary. -->

    <!ELEMENT Par EMPTY>    <!-- this is intentionally empty! -->
    <!ELEMENT P EMPTY>      <!-- this is intentionally empty! -->

    <!-- The following elements mark a word or sentence to be of a certain
         kind, such that it can  be typeset differently. They are terminal
         elements that should only contain  character data. But we have to
         allow  Alt elements  for handling  special characters.  For these
         elements we introduce  a long name - which is  easy to remember -
         and a  short name - which  you may prefer because  of the shorter
         markup. -->

    <!ELEMENT Keyword (#PCDATA|Alt)*>  <!-- Keyword -->
    <!ELEMENT K (#PCDATA|Alt)*>        <!-- Keyword (shortcut) -->

    <!ELEMENT Arg (#PCDATA|Alt)*>      <!-- Argument -->
    <!ELEMENT A (#PCDATA|Alt)*>        <!-- Argument (shortcut) -->

    <!ELEMENT Code (#PCDATA|Alt|A)*>   <!-- GAP code -->
    <!ELEMENT C (#PCDATA|Alt|A)*>      <!-- GAP code (shortcut) -->

    <!ELEMENT File (#PCDATA|Alt)*>     <!-- Filename -->
    <!ELEMENT F (#PCDATA|Alt)*>        <!-- Filename (shortcut) -->

    <!ELEMENT Button (#PCDATA|Alt)*>   <!-- "Button" (also Menu, Key) -->
    <!ELEMENT B (#PCDATA|Alt)*>        <!-- "Button" (shortcut) -->

    <!ELEMENT Package (#PCDATA|Alt)*>   <!-- A package name -->

    <!ELEMENT Quoted (%InnerText;)*>   <!-- Quoted (in quotes) text -->
    <!ELEMENT Q (%InnerText;)*>        <!-- Quoted text (shortcut) -->

    <!-- The following elements contain mathematical formulae. They are
         terminal elements that contain character data in TeX notation. -->

    <!-- Math with well defined translation to text output -->
    <!ELEMENT M (#PCDATA|A|Arg|Alt)*>
    <!-- Normal TeX math mode formula -->
    <!ELEMENT Math (#PCDATA|A|Arg|Alt)*>
    <!-- TeX displayed math mode formula -->
    <!ELEMENT Display (#PCDATA|A|Arg|Alt)*>

    <!-- The  following  elements  contain  GAP related  text  like  code,
         session  logs or  examples. They  are all  terminal elements  and
         consist of character data which is normally typeset verbatim. The
         different  types  of  the  elements only  control  how  they  are
         treated. -->

    <!ELEMENT Example (#PCDATA)>  <!-- This is subject to the automatic
                                       example checking mechanism -->
    <!ELEMENT Log (#PCDATA)>      <!-- This not -->
    <!ELEMENT Listing (#PCDATA)>  <!-- This is just for code listings -->
    <!ATTLIST Listing Type CDATA #IMPLIED> <!-- a comment about the type of
                                                listed code, may appear in
                                                output -->

    <!-- One  further  verbatim element,  this is truely  verbatim without
         any processing and intended  for ASCII substitutes of complicated
         displayed formulae or tables. -->

    <!ELEMENT Verb  (#PCDATA)>

    <!-- The following  elements are  for cross-referencing  purposes like
         URLs, citations,  references, and  the index. All  these elements
         are  terminal and  need special  methods  to make  up the  actual
         output during document generation. -->

    <!ELEMENT URL (#PCDATA|Alt)*>    <!-- Can we define this better? -->
    <!ATTLIST URL Text CDATA #IMPLIED>   <!-- This is for output formats
                                              that have links like HTML -->

    <!-- The following two are actually URLs, but the element name determines
         the type. -->

    <!ELEMENT Email (#PCDATA|Alt)*>
    <!ELEMENT Homepage (#PCDATA|Alt)*>

    <!ELEMENT Cite EMPTY>
    <!ATTLIST Cite Key CDATA #REQUIRED
                   Where CDATA #IMPLIED>

    <!ELEMENT Label EMPTY>
    <!ATTLIST Label Name CDATA #REQUIRED>

    <!ELEMENT Ref EMPTY>
    <!ATTLIST Ref Func      CDATA #IMPLIED
                  Oper      CDATA #IMPLIED
                  Meth      CDATA #IMPLIED
                  Filt      CDATA #IMPLIED
                  Prop      CDATA #IMPLIED
                  Attr      CDATA #IMPLIED
                  Var       CDATA #IMPLIED
                  Fam       CDATA #IMPLIED
                  InfoClass CDATA #IMPLIED
                  Chap      CDATA #IMPLIED
                  Sect      CDATA #IMPLIED
                  Subsect   CDATA #IMPLIED
                  Appendix  CDATA #IMPLIED
                  Text      CDATA #IMPLIED

                  Label     CDATA #IMPLIED
                  BookName  CDATA #IMPLIED
                  Style (Text|Number) #IMPLIED>  <!-- normally automatic -->

    <!-- Note that  only one attribute  of Ref is used  normally. BookName
         and  Style  can  be  specified in  addition  to  handle  external
         references and the typesetting style of the reference. -->

    <!ELEMENT Index (%InnerText;)*>
    <!ATTLIST Index Key    CDATA #IMPLIED
                    Subkey CDATA #IMPLIED>

    <!-- ==================================================================
         The following  describes the normal documentation  text which can
         occur  at various  places in  the document.  It does  not contain
         further sectioning elements. As  opposed to the InnerText element
         it can contain environments like enumerations, lists, and such.
         ================================================================== -->

    <!ENTITY % Text "%InnerText; | List | Enum | Table">

    <!ELEMENT Item ( %Text;)*>
    <!ELEMENT Mark ( %InnerText;)*>
    <!ELEMENT BigMark ( %InnerText;)*>

    <!ELEMENT List ( ((Mark,Item)|(BigMark,Item)|Item)+ )>
    <!ATTLIST List Only CDATA #IMPLIED
                   Not  CDATA #IMPLIED>
    <!ELEMENT Enum ( Item+ )>
    <!ATTLIST Enum Only CDATA #IMPLIED
                   Not  CDATA #IMPLIED>

    <!ELEMENT Table ( Caption?, (Row | HorLine)+ )>
    <!ATTLIST Table Label   CDATA #IMPLIED
                    Only    CDATA #IMPLIED
                    Not     CDATA #IMPLIED
                    Align   CDATA #REQUIRED>    <!-- A TeX tabular string -->
                    <!-- We allow | and l,c,r, nothing else -->
    <!ELEMENT Row   ( Item+ )>
    <!ELEMENT HorLine EMPTY>
    <!ELEMENT Caption ( %InnerText;)*>

    <!-- ==================================================================
         We start defining some things within the overall structure:
         ================================================================== -->

    <!-- The TitlePage consists of several sub-elements: -->

    <!ELEMENT TitlePage (Title, Subtitle?, Version?, Author+, Date?, Abstract?,
                         Copyright? , Acknowledgements? , Colophon? )>

    <!ELEMENT Title (%Text;)*>
    <!ELEMENT Subtitle (%Text;)*>
    <!ELEMENT Version (%Text;)*>
    <!ELEMENT Author (%Text;)*>    <!-- There may be more than one Author! -->
    <!ELEMENT Date (%Text;)*>
    <!ELEMENT Abstract (%Text;)*>
    <!ELEMENT Copyright (%Text;)*>
    <!ELEMENT Acknowledgements (%Text;)*>
    <!ELEMENT Colophon (%Text;)*>

    <!-- The following things just specify some information about the
         corresponding parts of the Book: -->

    <!ELEMENT TableOfContents EMPTY>
    <!ELEMENT Bibliography EMPTY>
    <!ATTLIST Bibliography Databases CDATA #REQUIRED
                           Style CDATA #IMPLIED>
    <!ELEMENT TheIndex EMPTY>

    <!-- ==================================================================
         Now we go on with the overall structure by defining the sectioning
         structure, which includes the Synopsis element:
         ================================================================== -->

    <!ELEMENT Subsection (%Text;| Heading)*>
    <!ATTLIST Subsection Label CDATA #IMPLIED> <!-- For reference purposes -->

    <!ELEMENT ManSection (((Func, Returns?) | (Oper, Returns?) |
                           (Meth, Returns?) | (Filt, Returns?) |
                           (Prop, Returns?) | (Attr, Returns?) |
                           Var | Fam | InfoClass)+, Description )>
    <!ATTLIST ManSection Label CDATA #IMPLIED> <!-- For reference purposes -->

    <!ELEMENT Returns (%Text;)*>
    <!ELEMENT Description (%Text;)*>

    <!-- Note that  the ManSection element  is actually a  subsection with
         respect  to labelling,  referencing, and  counting of  sectioning
         elements. -->

    <!ELEMENT Func EMPTY>
    <!ATTLIST Func Name  CDATA #REQUIRED
                   Label CDATA #IMPLIED
                   Arg   CDATA #REQUIRED
                   Comm  CDATA #IMPLIED>

    <!-- Note  that Arg  contains the  full list  of arguments,  including
         optional  parts,  which  are   denoted  by  square  brackets  [].
         Arguments   are  separated   by  whitespace,   commas  count   as
         whitespace. -->

    <!-- Note further that  even if Name and Label are  CDATA (and not ID)
         Label must make up a unique identifier. -->

    <!ELEMENT Oper EMPTY>
    <!ATTLIST Oper Name  CDATA #REQUIRED
                   Label CDATA #IMPLIED
                   Arg   CDATA #REQUIRED
                   Comm  CDATA #IMPLIED>

    <!ELEMENT Meth EMPTY>
    <!ATTLIST Meth Name  CDATA #REQUIRED
                   Label CDATA #IMPLIED
                   Arg   CDATA #REQUIRED
                   Comm  CDATA #IMPLIED>

    <!ELEMENT Filt EMPTY>
    <!ATTLIST Filt Name  CDATA #REQUIRED
                   Label CDATA #IMPLIED
                   Arg   CDATA #IMPLIED
                   Comm  CDATA #IMPLIED
                   Type  CDATA #IMPLIED>

    <!ELEMENT Prop EMPTY>
    <!ATTLIST Prop Name  CDATA #REQUIRED
                   Label CDATA #IMPLIED
                   Arg   CDATA #REQUIRED
                   Comm  CDATA #IMPLIED>

    <!ELEMENT Attr EMPTY>
    <!ATTLIST Attr Name  CDATA #REQUIRED
                   Label CDATA #IMPLIED
                   Arg   CDATA #REQUIRED
                   Comm  CDATA #IMPLIED>

    <!ELEMENT Var  EMPTY>
    <!ATTLIST Var  Name  CDATA #REQUIRED
                   Label CDATA #IMPLIED
                   Comm  CDATA #IMPLIED>

    <!ELEMENT Fam  EMPTY>
    <!ATTLIST Fam  Name  CDATA #REQUIRED
                   Label CDATA #IMPLIED
                   Comm  CDATA #IMPLIED>

    <!ELEMENT InfoClass EMPTY>
    <!ATTLIST InfoClass Name  CDATA #REQUIRED
                        Label CDATA #IMPLIED
                        Comm  CDATA #IMPLIED>

    <!ELEMENT Heading (%InnerText;)*>

    <!ELEMENT Section (%Text;| Heading | Subsection | ManSection)*>
    <!ATTLIST Section Label CDATA #IMPLIED>    <!-- For reference purposes -->

    <!ELEMENT Chapter (%Text;| Heading | Section)*>
    <!ATTLIST Chapter Label CDATA #IMPLIED>    <!-- For reference purposes -->

    <!-- Note that  the entity %InnerText; is  documentation that contains
         neither sectioning  elements nor environments  like enumerations,
         but  only  formulae,  labels, references,  citations,  and  other
         terminal elements. -->

    <!ELEMENT Appendix (%Text;| Heading | Section)*>
    <!ATTLIST Appendix Label CDATA #IMPLIED>   <!-- For reference purposes -->

    <!-- Note that  an Appendix  is exactly  the same  as a  Chapter. They
         differ only in the numbering. -->

    <!-- ==================================================================
         At last we define the overall structure of a gapdoc Book:
         ================================================================== -->

    <!ELEMENT Body  ( %Text;| Chapter | Section )*>

    <!ELEMENT Book (TitlePage,
                    TableOfContents?,
                    Body,
                    Appendix*,
                    Bibliography?,
                    TheIndex?)>
    <!ATTLIST Book Name CDATA #REQUIRED>

    <!-- Note  that  the  entity  %Text; is  documentation  that  contains
         no  further sectioning  elements but  possibly environments  like
         enumerations,  and formulae,  labels, references,  and citations.
         -->

    <!-- ============================================================== -->

Top of Book | Previous Chapter | Next Chapter

Goto Chapter: | Top | 1 | 2 | 3 | 4 | 5 | A | B | Bib | Ind

generated by GAPDoc2HTML