<!--
   BoostBook DTD - development version

   For further information, see: http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Boost_Documentation_Format

   Copyright (c) 2002 by Peter Simons <simons@cryp.to>
   Copyright (c) 2003-2004 by Douglas Gregor <doug.gregor -at- gmail.com>
   Copyright (c) 2007 by Frank Mori Hess <fmhess@users.sourceforge.net>

   Distributed under the Boost Software License, Version 1.0.
   (See accompanying file LICENSE_1_0.txt or copy at
   http://www.boost.org/LICENSE_1_0.txt)

   The latest stable DTD module is identified by the PUBLIC and SYSTEM identifiers:

   PUBLIC "-//Boost//DTD BoostBook XML V1.1//EN"
   SYSTEM "http://www.boost.org/tools/boostbook/dtd/1.1/boostbook.dtd"

   $Revision$
   $Date$
-->

<!--========== Define XInclude features. ==========-->
<!-- This is not really integrated into the DTD yet. Needs more
     research. -->
<!--
<!ELEMENT xi:include (xi:fallback)?>
<!ATTLIST xi:include
    xmlns:xi   CDATA       #FIXED    "http://www.w3.org/2001/XInclude"
    href       CDATA       #REQUIRED
    parse      (xml|text)  "xml"
    encoding   CDATA       #IMPLIED>

<!ELEMENT xi:fallback ANY>
<!ATTLIST xi:fallback
    xmlns:xi   CDATA   #FIXED   "http://www.w3.org/2001/XInclude">
 -->

<!ENTITY % local.common.attrib "last-revision CDATA  #IMPLIED">

<!--========== Define the BoostBook extensions ==========-->
<!ENTITY % boost.common.attrib "%local.common.attrib;
                                id            CDATA  #IMPLIED">

<!ENTITY % boost.namespace.mix
        "class|class-specialization|struct|struct-specialization|
         union|union-specialization|typedef|enum|
         free-function-group|function|overloaded-function|
         namespace">

<!ENTITY % boost.template.mix
        "template-type-parameter|template-nontype-parameter|template-varargs">

<!ENTITY % boost.class.members
        "static-constant|typedef|enum|
         copy-assignment|constructor|destructor|method-group|
         method|overloaded-method|data-member|class|class-specialization|struct|
         struct-specialization|union|union-specialization">

<!ENTITY % boost.class.mix
        "%boost.class.members;|free-function-group|function|overloaded-function">

<!ENTITY % boost.class.content
             "template?, inherit*, purpose?, description?,
              (%boost.class.mix;|access)*">

<!ENTITY % boost.class-specialization.content
             "template?, specialization?, inherit?, purpose?, description?,
              (%boost.class.mix;|access)*">

<!ENTITY % boost.function.semantics
        "purpose?, description?, requires?, effects?, postconditions?,
         returns?, throws?, complexity?, notes?, rationale?">

<!ENTITY % library.content
        "libraryinfo, (title, ((section|library-reference|testsuite))+)?">

<!ELEMENT library (%library.content;)>
<!ATTLIST library
    name      CDATA   #REQUIRED
    dirname   CDATA   #REQUIRED
    html-only CDATA   #IMPLIED
    url       CDATA   #IMPLIED
    %boost.common.attrib;>

<!ELEMENT boostbook (title, (chapter|library)*)>
<!ATTLIST boostbook %boost.common.attrib;>

<!ELEMENT libraryinfo (author+, copyright*, legalnotice*, librarypurpose, librarycategory*)>
<!ATTLIST libraryinfo %boost.common.attrib;>

<!ELEMENT librarypurpose (#PCDATA|code|ulink|functionname|methodname|classname|macroname|headername|enumname|globalname)*>
<!ATTLIST librarypurpose %boost.common.attrib;>

<!ELEMENT librarycategory (#PCDATA)>
<!ATTLIST librarycategory
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT libraryname  (#PCDATA)>
<!ATTLIST libraryname %boost.common.attrib;>

<!ELEMENT library-reference ANY>
<!ATTLIST library-reference
    %boost.common.attrib;>

<!ELEMENT librarylist EMPTY>
<!ATTLIST librarylist %boost.common.attrib;>

<!ELEMENT librarycategorylist (librarycategorydef)*>
<!ATTLIST librarycategorylist %boost.common.attrib;>

<!ELEMENT librarycategorydef (#PCDATA)>
<!ATTLIST librarycategorydef
         name   CDATA   #REQUIRED
         %boost.common.attrib;>

<!ELEMENT header ANY>
<!ATTLIST header
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT namespace (%boost.namespace.mix;)*>
<!ATTLIST namespace
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT class (%boost.class.content;)>
<!ATTLIST class
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT struct (%boost.class.content;)>
<!ATTLIST struct
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT union (%boost.class.content;)>
<!ATTLIST union
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT class-specialization (%boost.class-specialization.content;)>
<!ATTLIST class-specialization
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT struct-specialization (%boost.class-specialization.content;)>
<!ATTLIST struct-specialization
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT union-specialization (%boost.class-specialization.content;)>
<!ATTLIST union-specialization
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT access (%boost.class.members;)+>
<!ATTLIST access
    name CDATA #REQUIRED
    %boost.common.attrib;>

<!--========= C++ Templates =========-->
<!ELEMENT template (%boost.template.mix;)*>
<!ATTLIST template %boost.common.attrib;>

<!ELEMENT template-type-parameter (default?, purpose?)>
<!ATTLIST template-type-parameter
    name                     CDATA  #REQUIRED
    pack                     CDATA  #IMPLIED 
    %boost.common.attrib;>

<!ELEMENT template-nontype-parameter (type, default?, purpose?)>
<!ATTLIST template-nontype-parameter
    name                     CDATA  #REQUIRED
    pack                     CDATA  #IMPLIED 
    %boost.common.attrib;>

<!ELEMENT template-varargs EMPTY>
<!ATTLIST template-varargs %boost.common.attrib;>

<!ELEMENT specialization (template-arg)*>
<!ATTLIST specialization %boost.common.attrib;>

<!ELEMENT template-arg ANY>
<!ATTLIST template-arg
    pack    CDATA  #IMPLIED 
    %boost.common.attrib;>

<!ELEMENT default ANY>
<!ATTLIST default %boost.common.attrib;>

<!ELEMENT inherit (type, purpose?)>
<!ATTLIST inherit
    access  CDATA  #IMPLIED
    pack    CDATA  #IMPLIED 
    %boost.common.attrib;>

<!ELEMENT purpose ANY>
<!ATTLIST purpose %boost.common.attrib;>

<!ELEMENT description ANY>
<!ATTLIST description %boost.common.attrib;>

<!ELEMENT type ANY>
<!ATTLIST type %boost.common.attrib;>

<!ELEMENT typedef (type, purpose?, description?)>
<!ATTLIST typedef
    name     CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT enum (enumvalue*, purpose?, description?)>
<!ATTLIST enum
    name     CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT enumvalue (default?, purpose?, description?)>
<!ATTLIST enumvalue
    name     CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT static-constant (type, default, purpose?, description?)>
<!ATTLIST static-constant
    name   CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT data-member (type, purpose?, description?)>
<!ATTLIST data-member
    name         CDATA  #REQUIRED
    specifiers   CDATA  #IMPLIED
    %boost.common.attrib;>

<!ELEMENT paramtype ANY>
<!ATTLIST paramtype %boost.common.attrib;>

<!ELEMENT effects ANY>
<!ATTLIST effects %boost.common.attrib;>

<!ELEMENT postconditions ANY>
<!ATTLIST postconditions %boost.common.attrib;>

<!ELEMENT method-group (method|overloaded-method)*>
<!ATTLIST method-group
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT constructor (template?, parameter*, %boost.function.semantics;)>
<!ATTLIST constructor
    specifiers   CDATA  #IMPLIED
    %boost.common.attrib;>

<!ELEMENT destructor (%boost.function.semantics;)>
<!ATTLIST destructor
    specifiers   CDATA  #IMPLIED
    %boost.common.attrib;>

<!ELEMENT method (template?, type, parameter*, %boost.function.semantics;)>
<!ATTLIST method
    name         CDATA  #REQUIRED
    cv           CDATA  #IMPLIED
    specifiers   CDATA  #IMPLIED
    %boost.common.attrib;>

<!ELEMENT function (template?, type, parameter*, %boost.function.semantics;)>
<!ATTLIST function
    name         CDATA  #REQUIRED
    specifiers   CDATA  #IMPLIED
    %boost.common.attrib;>

<!ELEMENT overloaded-method (signature*, %boost.function.semantics;)>
<!ATTLIST overloaded-method
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT overloaded-function (signature*, %boost.function.semantics;)>
<!ATTLIST overloaded-function
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT signature (template?, type, parameter*)>
<!ATTLIST signature
    cv           CDATA  #IMPLIED
    specifiers   CDATA  #IMPLIED
    %boost.common.attrib;>

<!ELEMENT requires ANY>
<!ATTLIST requires %boost.common.attrib;>

<!ELEMENT returns ANY>
<!ATTLIST returns %boost.common.attrib;>

<!ELEMENT throws ANY>
<!ATTLIST throws %boost.common.attrib;>

<!ELEMENT complexity ANY>
<!ATTLIST complexity %boost.common.attrib;>

<!ELEMENT notes ANY>
<!ATTLIST notes %boost.common.attrib;>

<!ELEMENT rationale ANY>
<!ATTLIST rationale %boost.common.attrib;>

<!ELEMENT functionname (#PCDATA)>
<!ATTLIST functionname
    alt          CDATA  #IMPLIED
    %boost.common.attrib;>

<!ELEMENT enumname (#PCDATA)>
<!ATTLIST enumname
    alt          CDATA  #IMPLIED
    %boost.common.attrib;>

<!ELEMENT macroname (#PCDATA)>
<!ATTLIST macroname
    alt          CDATA  #IMPLIED
    %boost.common.attrib;>

<!ELEMENT headername (#PCDATA)>
<!ATTLIST headername
    alt          CDATA  #IMPLIED
    %boost.common.attrib;>

<!ELEMENT globalname (#PCDATA)>
<!ATTLIST globalname
    alt          CDATA  #IMPLIED
    %boost.common.attrib;>

<!ELEMENT copy-assignment
    (template?, type?, parameter*, %boost.function.semantics;)>
<!ATTLIST copy-assignment
    cv           CDATA  #IMPLIED
    specifiers   CDATA  #IMPLIED
    %boost.common.attrib;>

<!ELEMENT free-function-group (function|overloaded-function)*>
<!ATTLIST free-function-group
    name  CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT precondition ANY>
<!ATTLIST precondition %boost.common.attrib;>

<!ELEMENT code ANY>
<!ATTLIST code %boost.common.attrib;>

<!ELEMENT using-namespace EMPTY>
<!ATTLIST using-namespace
    name   CDATA  #REQUIRED
    %boost.common.attrib;>

<!ELEMENT using-class EMPTY>
<!ATTLIST using-class
     name        CDATA #REQUIRED
     %boost.common.attrib;>

<!--========== Boost Testsuite Extensions ==========-->
<!ENTITY % boost.testsuite.tests
        "compile-test|link-test|run-test|
         compile-fail-test|link-fail-test|run-fail-test">
<!ENTITY % boost.testsuite.test.content
        "source*, lib*, requirement*, purpose, if-fails?">

<!ELEMENT testsuite ((%boost.testsuite.tests;)+)>
<!ATTLIST testsuite %boost.common.attrib;>

<!ELEMENT compile-test (%boost.testsuite.test.content;)>
<!ATTLIST compile-test
     filename CDATA #REQUIRED
     name     CDATA #IMPLIED>

<!ELEMENT link-test (%boost.testsuite.test.content;)>
<!ATTLIST link-test
     filename CDATA #REQUIRED
     name     CDATA #IMPLIED>

<!ELEMENT run-test (%boost.testsuite.test.content;)>
<!ATTLIST run-test
     filename CDATA #REQUIRED
     name     CDATA #IMPLIED>

<!ELEMENT compile-fail-test (%boost.testsuite.test.content;)>
<!ATTLIST compile-fail-test
     filename CDATA #REQUIRED
     name     CDATA #IMPLIED>

<!ELEMENT link-fail-test (%boost.testsuite.test.content;)>
<!ATTLIST link-fail-test
     filename CDATA #REQUIRED
     name     CDATA #IMPLIED>

<!ELEMENT run-fail-test (%boost.testsuite.test.content;)>
<!ATTLIST run-fail-test
     filename CDATA #REQUIRED
     name     CDATA #IMPLIED>

<!ELEMENT source (#PCDATA|snippet)*>

<!ELEMENT snippet EMPTY>
<!ATTLIST snippet
     name CDATA #REQUIRED>

<!ELEMENT lib (#PCDATA)>

<!ELEMENT requirement (#PCDATA)>
<!ATTLIST requirement
     name CDATA #REQUIRED>

<!ELEMENT if-fails ANY>

<!ELEMENT parameter (paramtype, default?, description?)>
<!ATTLIST parameter
     name CDATA #IMPLIED
     pack CDATA #IMPLIED>

<!ELEMENT programlisting ANY>
<!ATTLIST programlisting
     name        CDATA #IMPLIED>

<!--========== Customize the DocBook DTD ==========-->
<!ENTITY % local.tech.char.class "|functionname|libraryname|enumname|headername|macroname|code">
<!ENTITY % local.para.class
        "|using-namespace|using-class|librarylist|librarycategorylist">
<!ENTITY % local.descobj.class "|libraryinfo">
<!ENTITY % local.classname.attrib "alt CDATA #IMPLIED">
<!ENTITY % local.methodname.attrib "alt CDATA #IMPLIED">
<!ENTITY % local.refentry.class "|library-reference|testsuite">
<!ENTITY % local.title.char.mix "">
<!ENTITY % programlisting.module "IGNORE">
<!ENTITY % parameter.module      "IGNORE">
<!ENTITY % function.module       "IGNORE">
<!ENTITY % type.module           "IGNORE">

<!--========== Import DocBook DTD ==========-->
<!ENTITY % DocBook PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
           "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">

%DocBook;
