<!ENTITY % Boolean "T|True|TRUE|true|F|False|FALSE|false" >
<!ELEMENT description ( #PCDATA )* >
<!ELEMENT args        ( arg )* >
<!ELEMENT arg         ( #PCDATA )* >
<!ELEMENT selfDoc     ( description, (args)* )* >
<!ELEMENT name        ( #PCDATA )* >
<!ELEMENT sname       ( #PCDATA )* >
<!ELEMENT def         ( #PCDATA )* >

<!ELEMENT aliases         ( alias )+ >
<!ELEMENT alias           ( sname )* >

<!ELEMENT code            ( #PCDATA)*  >
<!ELEMENT example         ( description, code) >
<!ELEMENT examples        ( example )+ >
<!ELEMENT function    ( sname, aliases, (autoDoc)*, def, (examples)* )*  >


<!ELEMENT expression  ( #PCDATA)*  >
<!ELEMENT overview    ( #PCDATA)*  >


<!ELEMENT fragment    ( #PCDATA )* >
<!ELEMENT fragmentRef EMPTY >


<!ELEMENT SSource  ( (overview)?, (function| expression | fragment)* ) >

<!ATTLIST function 
     lang  CDATA #IMPLIED
>

<!ATTLIST def
     lang  CDATA #IMPLIED
>

<!ATTLIST code
     lang  CDATA #IMPLIED
>

<!ATTLIST fragment
     id    CDATA #IMPLIED
     lang  CDATA #IMPLIED
>

<!ATTLIST arg
     name  CDATA #IMPLIED
>

<!ATTLIST example
     name  CDATA #IMPLIED
     run   (%Boolean;) #IMPLIED
>

<!ATTLIST fragmentRef
     id  CDATA #IMPLIED
>

<!-- Some constants/macros that are useful 
     to allow us to change how these are represented,
     easily parsed
  -->
<!ENTITY sgets "<-" >
<!ENTITY Latex "LaTeX" >
<!ENTITY SPlus "splus" >
