Serious upgrade of internal subset support, setup for gtk-doc, Daniel
diff --git a/include/libxml/entities.h b/include/libxml/entities.h
index 86c425f..99ce163 100644
--- a/include/libxml/entities.h
+++ b/include/libxml/entities.h
@@ -34,7 +34,8 @@
     const CHAR    *ExternalID;	/* External identifier for PUBLIC Entity */
     const CHAR    *SystemID;	/* URI for a SYSTEM or PUBLIC Entity */
     CHAR *content;		/* The entity content or ndata if unparsed */
-} xmlEntity, *xmlEntityPtr;
+} xmlEntity;
+typedef xmlEntity *xmlEntityPtr;
 
 /*
  * ALl entities are stored in a table there is one table per DTD
@@ -47,28 +48,29 @@
     int nb_entities;		/* number of elements stored */
     int max_entities;		/* maximum number of elements */
     xmlEntityPtr table;	        /* the table of entities */
-} xmlEntitiesTable, *xmlEntitiesTablePtr;
+} xmlEntitiesTable;
+typedef xmlEntitiesTable *xmlEntitiesTablePtr;
 
 
 /*
  * External functions :
  */
 
-extern void xmlAddDocEntity(xmlDocPtr doc, const CHAR *name, int type,
+void xmlAddDocEntity(xmlDocPtr doc, const CHAR *name, int type,
               const CHAR *ExternalID, const CHAR *SystemID, CHAR *content);
-extern void xmlAddDtdEntity(xmlDocPtr doc, const CHAR *name, int type,
+void xmlAddDtdEntity(xmlDocPtr doc, const CHAR *name, int type,
               const CHAR *ExternalID, const CHAR *SystemID, CHAR *content);
-extern xmlEntityPtr xmlGetPredefinedEntity(const CHAR *name);
-extern xmlEntityPtr xmlGetDocEntity(xmlDocPtr doc, const CHAR *name);
-extern xmlEntityPtr xmlGetDtdEntity(xmlDocPtr doc, const CHAR *name);
-extern CHAR *xmlEncodeEntities(xmlDocPtr doc, const CHAR *input);
-extern xmlEntitiesTablePtr xmlCreateEntitiesTable(void);
-extern xmlEntitiesTablePtr xmlCopyEntitiesTable(xmlEntitiesTablePtr table);
-extern void xmlFreeEntitiesTable(xmlEntitiesTablePtr table);
-extern void xmlDumpEntitiesTable(xmlEntitiesTablePtr table);
-extern xmlParserInputPtr xmlNewEntityInputStream(xmlParserCtxtPtr ctxt,
+xmlEntityPtr xmlGetPredefinedEntity(const CHAR *name);
+xmlEntityPtr xmlGetDocEntity(xmlDocPtr doc, const CHAR *name);
+xmlEntityPtr xmlGetDtdEntity(xmlDocPtr doc, const CHAR *name);
+CHAR *xmlEncodeEntities(xmlDocPtr doc, const CHAR *input);
+xmlEntitiesTablePtr xmlCreateEntitiesTable(void);
+xmlEntitiesTablePtr xmlCopyEntitiesTable(xmlEntitiesTablePtr table);
+void xmlFreeEntitiesTable(xmlEntitiesTablePtr table);
+void xmlDumpEntitiesTable(xmlEntitiesTablePtr table);
+xmlParserInputPtr xmlNewEntityInputStream(xmlParserCtxtPtr ctxt,
                                                  xmlEntityPtr entity);
-extern xmlEntitiesTablePtr xmlCopyEntitiesTable(xmlEntitiesTablePtr table);
+xmlEntitiesTablePtr xmlCopyEntitiesTable(xmlEntitiesTablePtr table);
 
 #ifdef __cplusplus
 }
diff --git a/include/libxml/parser.h b/include/libxml/parser.h
index a06d481..ca0835f 100644
--- a/include/libxml/parser.h
+++ b/include/libxml/parser.h
@@ -26,24 +26,28 @@
     const CHAR *cur;                  /* Current char being parsed */
     int line;                         /* Current line */
     int col;                          /* Current column */
-} xmlParserInput, *xmlParserInputPtr;
+} xmlParserInput;
+typedef xmlParserInput *xmlParserInputPtr;
 
-typedef struct xmlParserNodeInfo {
+typedef struct _xmlParserNodeInfo {
   const struct xmlNode* node;
   /* Position & line # that text that created the node begins & ends on */
   unsigned long begin_pos;
   unsigned long begin_line;
   unsigned long end_pos;
   unsigned long end_line;
-} xmlParserNodeInfo;
+} _xmlParserNodeInfo;
+typedef _xmlParserNodeInfo xmlParserNodeInfo;
 
 typedef struct xmlParserNodeInfoSeq {
   unsigned long maximum;
   unsigned long length;
   xmlParserNodeInfo* buffer;
-} xmlParserNodeInfoSeq, *xmlParserNodeInfoSeqPtr;
+} _xmlParserNodeInfoSeq;
+typedef _xmlParserNodeInfoSeq xmlParserNodeInfoSeq;
+typedef xmlParserNodeInfoSeq *xmlParserNodeInfoSeqPtr;
 
-typedef struct xmlParserCtxt {
+typedef struct _xmlParserCtxt {
     struct xmlSAXHandler *sax;        /* The SAX handler */
     xmlDocPtr doc;                    /* the document being built */
     int            wellFormed;        /* is the document well formed */
@@ -62,7 +66,9 @@
 
     int record_info;                  /* Whether node info should be kept */
     xmlParserNodeInfoSeq node_seq;    /* info about each node parsed */
-} xmlParserCtxt, *xmlParserCtxtPtr;
+} _xmlParserCtxt;
+typedef _xmlParserCtxt xmlParserCtxt;
+typedef xmlParserCtxt *xmlParserCtxtPtr;
 
 /*
  * a SAX Locator.
@@ -73,7 +79,9 @@
     const CHAR *(*getSystemId)(xmlParserCtxtPtr ctxt);
     int (*getLineNumber)(xmlParserCtxtPtr ctxt);
     int (*getColumnNumber)(xmlParserCtxtPtr ctxt);
-} xmlSAXLocator, *xmlSAXLocatorPtr;
+} _xmlSAXLocator;
+typedef _xmlSAXLocator xmlSAXLocator;
+typedef xmlSAXLocator *xmlSAXLocatorPtr;
 
 /*
  * a SAX Exception.
@@ -120,7 +128,8 @@
     warningSAXFunc warning;
     errorSAXFunc error;
     fatalErrorSAXFunc fatalError;
-} xmlSAXHandler, *xmlSAXHandlerPtr;
+} xmlSAXHandler;
+typedef xmlSAXHandler *xmlSAXHandlerPtr;
 
 /*
  * Global variables: just the SAX interface tables we are looking for full
@@ -130,61 +139,58 @@
 extern xmlSAXHandler xmlDefaultSAXHandler;
 
 #include "entities.h"
+#include "error.h"
 
 /*
  * CHAR handling
  */
-extern CHAR *xmlStrdup(const CHAR *input);
-extern CHAR *xmlStrndup(const CHAR *input, int n);
-extern CHAR *xmlStrchr(const CHAR *str, CHAR val);
-extern int xmlStrcmp(const CHAR *str1, const CHAR *str2);
-extern int xmlStrncmp(const CHAR *str1, const CHAR *str2, int len);
-extern int xmlStrlen(const CHAR *str);
-extern CHAR *xmlStrcat(CHAR *cur, const CHAR *add);
-extern CHAR *xmlStrncat(CHAR *cur, const CHAR *add, int len);
+CHAR *xmlStrdup(const CHAR *cur);
+CHAR *xmlStrndup(const CHAR *cur, int len);
+CHAR *xmlStrchr(const CHAR *str, CHAR val);
+int xmlStrcmp(const CHAR *str1, const CHAR *str2);
+int xmlStrncmp(const CHAR *str1, const CHAR *str2, int len);
+int xmlStrlen(const CHAR *str);
+CHAR *xmlStrcat(CHAR *cur, const CHAR *add);
+CHAR *xmlStrncat(CHAR *cur, const CHAR *add, int len);
 
 /*
  * Interfaces
  */
-extern xmlDocPtr xmlParseDoc(CHAR *cur);
-extern xmlDocPtr xmlParseMemory(char *buffer, int size);
-extern xmlDocPtr xmlParseFile(const char *filename);
+xmlDocPtr xmlParseDoc(CHAR *cur);
+xmlDocPtr xmlParseMemory(char *buffer, int size);
+xmlDocPtr xmlParseFile(const char *filename);
 
 /*
  * Recovery mode 
  */
-extern xmlDocPtr xmlRecoverDoc(CHAR *cur);
-extern xmlDocPtr xmlRecoverMemory(char *buffer, int size);
-extern xmlDocPtr xmlRecoverFile(const char *filename);
+xmlDocPtr xmlRecoverDoc(CHAR *cur);
+xmlDocPtr xmlRecoverMemory(char *buffer, int size);
+xmlDocPtr xmlRecoverFile(const char *filename);
 
 /*
  * Internal routines
  */
-extern int xmlParseDocument(xmlParserCtxtPtr ctxt);
-extern xmlDocPtr xmlSAXParseDoc(xmlSAXHandlerPtr sax, CHAR *cur, int recovery);
-extern xmlDocPtr xmlSAXParseMemory(xmlSAXHandlerPtr sax, char *buffer,
+int xmlParseDocument(xmlParserCtxtPtr ctxt);
+xmlDocPtr xmlSAXParseDoc(xmlSAXHandlerPtr sax, CHAR *cur, int recovery);
+xmlDocPtr xmlSAXParseMemory(xmlSAXHandlerPtr sax, char *buffer,
                                    int size, int recovery);
-extern xmlDocPtr xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename,
+xmlDocPtr xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename,
                                  int recovery);
-extern void xmlInitParserCtxt(xmlParserCtxtPtr ctx);
-extern void xmlClearParserCtxt(xmlParserCtxtPtr ctx);
-extern void xmlSetupParserForBuffer(xmlParserCtxtPtr ctx, const CHAR* buffer,
+void xmlInitParserCtxt(xmlParserCtxtPtr ctxt);
+void xmlClearParserCtxt(xmlParserCtxtPtr ctxt);
+void xmlSetupParserForBuffer(xmlParserCtxtPtr ctxt, const CHAR* buffer,
                                     const char* filename);
 
-extern void xmlParserError(xmlParserCtxtPtr ctxt, const char *msg, ...);
-
-extern const xmlParserNodeInfo* xmlParserFindNodeInfo(const xmlParserCtxt* c,
-                                                      const xmlNode* node);
-extern void xmlInitNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
-extern void xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
+const xmlParserNodeInfo* xmlParserFindNodeInfo(const xmlParserCtxt* ctxt,
+                                               const xmlNode* node);
+void xmlInitNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
+void xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
 unsigned long xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeq* seq,
                                          const xmlNode* node);
-extern void xmlParserAddNodeInfo(xmlParserCtxtPtr ctx,
-                                 const xmlParserNodeInfo* info);
+void xmlParserAddNodeInfo(xmlParserCtxtPtr ctxt,
+                          const xmlParserNodeInfo* info);
 
-extern void xmlParserWarning(xmlParserCtxtPtr ctxt, const char *msg, ...);
-extern void xmlParserError(xmlParserCtxtPtr ctxt, const char *msg, ...);
-extern void xmlDefaultSAXHandlerInit(void);
+void xmlDefaultSAXHandlerInit(void);
 #ifdef __cplusplus
 }
 #endif
diff --git a/include/libxml/parserInternals.h b/include/libxml/parserInternals.h
new file mode 100644
index 0000000..9cd6a21
--- /dev/null
+++ b/include/libxml/parserInternals.h
@@ -0,0 +1,128 @@
+/*
+ * parserInternals.h : internals routines exported by the parser.
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel.Veillard@w3.org
+ */
+
+#ifndef __XML_PARSER_INTERNALS_H__
+#define __XML_PARSER_INTERNALS_H__
+
+#include "parser.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Entities
+ */
+void
+xmlHandleEntity(xmlParserCtxtPtr ctxt, xmlEntityPtr entity);
+
+/*
+ * Namespaces.
+ */
+CHAR *
+xmlNamespaceParseNCName(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlNamespaceParseQName(xmlParserCtxtPtr ctxt, CHAR **prefix);
+CHAR *
+xmlNamespaceParseNSDef(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParseQuotedString(xmlParserCtxtPtr ctxt);
+void
+xmlParseNamespace(xmlParserCtxtPtr ctxt);
+
+/*
+ * Generic production rules
+ */
+CHAR *
+xmlParseName(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParseNmtoken(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParseEntityValue(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParseAttValue(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParseSystemLiteral(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParsePubidLiteral(xmlParserCtxtPtr ctxt);
+void
+xmlParseCharData(xmlParserCtxtPtr ctxt, int cdata);
+CHAR *
+xmlParseExternalID(xmlParserCtxtPtr ctxt, CHAR **publicID, int strict);
+xmlNodePtr 
+xmlParseComment(xmlParserCtxtPtr ctxt, int create);
+CHAR *
+xmlParsePITarget(xmlParserCtxtPtr ctxt);
+void
+xmlParsePI(xmlParserCtxtPtr ctxt);
+void
+xmlParseNotationDecl(xmlParserCtxtPtr ctxt);
+void
+xmlParseEntityDecl(xmlParserCtxtPtr ctxt);
+int
+xmlParseDefaultDecl(xmlParserCtxtPtr ctxt, CHAR **value);
+xmlEnumerationPtr
+xmlParseNotationType(xmlParserCtxtPtr ctxt);
+xmlEnumerationPtr
+xmlParseEnumerationType(xmlParserCtxtPtr ctxt);
+int
+xmlParseEnumeratedType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree);
+int
+xmlParseAttributeType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree);
+void
+xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt);
+xmlElementContentPtr
+xmlParseElementMixedContentDecl(xmlParserCtxtPtr ctxt);
+xmlElementContentPtr
+xmlParseElementChildrenContentDecl(xmlParserCtxtPtr ctxt);
+int
+xmlParseElementContentDecl(xmlParserCtxtPtr ctxt, CHAR *name,
+                           xmlElementContentPtr *result);
+int
+xmlParseElementDecl(xmlParserCtxtPtr ctxt);
+void
+xmlParseMarkupDecl(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParseCharRef(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParseEntityRef(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParseReference(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParsePEReference(xmlParserCtxtPtr ctxt);
+void
+xmlParseDocTypeDecl(xmlParserCtxtPtr ctxt);
+xmlAttrPtr 
+xmlParseAttribute(xmlParserCtxtPtr ctxt, xmlNodePtr node);
+xmlNodePtr 
+xmlParseStartTag(xmlParserCtxtPtr ctxt);
+void
+xmlParseEndTag(xmlParserCtxtPtr ctxt, xmlNsPtr *nsPtr, CHAR **tagPtr);
+void
+xmlParseCDSect(xmlParserCtxtPtr ctxt);
+void
+xmlParseContent(xmlParserCtxtPtr ctxt);
+xmlNodePtr 
+xmlParseElement(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParseVersionNum(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParseVersionInfo(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParseEncName(xmlParserCtxtPtr ctxt);
+CHAR *
+xmlParseEncodingDecl(xmlParserCtxtPtr ctxt);
+int
+xmlParseSDDecl(xmlParserCtxtPtr ctxt);
+void
+xmlParseXMLDecl(xmlParserCtxtPtr ctxt);
+void
+xmlParseMisc(xmlParserCtxtPtr ctxt);
+
+
+#endif /* __XML_PARSER_INTERNALS_H__ */
diff --git a/include/libxml/tree.h b/include/libxml/tree.h
index ba77f76..4443836 100644
--- a/include/libxml/tree.h
+++ b/include/libxml/tree.h
@@ -55,41 +55,67 @@
 
 /*
  * a DTD Notation definition
- * TODO !!!!
  */
 
+typedef struct xmlNotation {
+    const CHAR               *name;	/* Notation name */
+    const CHAR               *PublicID;	/* Public identifier, if any */
+    const CHAR               *SystemID;	/* System identifier, if any */
+} xmlNotation;
+typedef xmlNotation *xmlNotationPtr;
+
 /*
  * a DTD Attribute definition
- * TODO !!!!
  */
 
-#define XML_ATTRIBUTE_NONE		1
-#define XML_ATTRIBUTE_REQUIRED		2
-#define XML_ATTRIBUTE_IMPLIED		3
-#define XML_ATTRIBUTE_FIXED		4
+typedef enum {
+    XML_ATTRIBUTE_CDATA = 1,
+    XML_ATTRIBUTE_ID,
+    XML_ATTRIBUTE_IDREF	,
+    XML_ATTRIBUTE_IDREFS,
+    XML_ATTRIBUTE_ENTITY,
+    XML_ATTRIBUTE_ENTITIES,
+    XML_ATTRIBUTE_NMTOKEN,
+    XML_ATTRIBUTE_NMTOKENS,
+    XML_ATTRIBUTE_ENUMERATION,
+    XML_ATTRIBUTE_NOTATION
+} xmlAttributeType;
 
-#define XML_ATTRIBUTE_STRING		1
-#define XML_ATTRIBUTE_ID		2
-#define XML_ATTRIBUTE_IDREF		3
-#define XML_ATTRIBUTE_IDREFS		4
-#define XML_ATTRIBUTE_ENTITY		5
-#define XML_ATTRIBUTE_ENTITIES		6
-#define XML_ATTRIBUTE_NMTOKEN		7
-#define XML_ATTRIBUTE_NMTOKENS		8
-#define XML_ATTRIBUTE_ENUMERATED	9
+typedef enum {
+    XML_ATTRIBUTE_NONE = 1,
+    XML_ATTRIBUTE_REQUIRED,
+    XML_ATTRIBUTE_IMPLIED,
+    XML_ATTRIBUTE_FIXED
+} xmlAttributeDefault;
+
+typedef struct xmlEnumeration {
+    struct xmlEnumeration    *next;	/* next one */
+    const CHAR               *name;	/* Enumeration name */
+} xmlEnumeration;
+typedef xmlEnumeration *xmlEnumerationPtr;
+
+typedef struct xmlAttribute {
+    const CHAR            *elem;	/* Element holding the attribute */
+    const CHAR            *name;	/* Attribute name */
+    xmlAttributeType       type;	/* The type */
+    xmlAttributeDefault    def;		/* the default */
+    const CHAR            *defaultValue;/* or the default value */
+    xmlEnumerationPtr      tree;        /* or the enumeration tree if any */
+} xmlAttribute;
+typedef xmlAttribute *xmlAttributePtr;
 
 /*
  * a DTD Element definition.
  */
 typedef enum {
-    XML_ELEMENT_CONTENT_PCDATA=1,
+    XML_ELEMENT_CONTENT_PCDATA = 1,
     XML_ELEMENT_CONTENT_ELEMENT,
     XML_ELEMENT_CONTENT_SEQ,
     XML_ELEMENT_CONTENT_OR
 } xmlElementContentType;
 
 typedef enum {
-    XML_ELEMENT_CONTENT_ONCE=1,
+    XML_ELEMENT_CONTENT_ONCE = 1,
     XML_ELEMENT_CONTENT_OPT,
     XML_ELEMENT_CONTENT_MULT,
     XML_ELEMENT_CONTENT_PLUS
@@ -101,10 +127,11 @@
     const CHAR               *name;	/* Element name */
     struct xmlElementContent *c1;	/* first child */
     struct xmlElementContent *c2;	/* second child */
-} xmlElementContent, *xmlElementContentPtr;
+} xmlElementContent;
+typedef xmlElementContent *xmlElementContentPtr;
 
 typedef enum {
-    XML_ELEMENT_TYPE_EMPTY=1,
+    XML_ELEMENT_TYPE_EMPTY = 1,
     XML_ELEMENT_TYPE_ANY,
     XML_ELEMENT_TYPE_MIXED,
     XML_ELEMENT_TYPE_ELEMENT
@@ -114,7 +141,8 @@
     const CHAR          *name;		/* Element name */
     xmlElementTypeVal    type;		/* The type */
     xmlElementContentPtr content;	/* the allowed element content */
-} xmlElement, *xmlElementPtr;
+} xmlElement;
+typedef xmlElement *xmlElementPtr;
 
 /*
  * An XML namespace.
@@ -123,7 +151,7 @@
  */
 
 typedef enum {
-    XML_GLOBAL_NAMESPACE=1,	/* old style global namespace */
+    XML_GLOBAL_NAMESPACE = 1,	/* old style global namespace */
     XML_LOCAL_NAMESPACE		/* new style local scoping */
 } xmlNsType;
 
@@ -132,7 +160,8 @@
     xmlNsType      type;	/* global or local */
     const CHAR    *href;	/* URL for the namespace */
     const CHAR    *prefix;	/* prefix for the namespace */
-} xmlNs, *xmlNsPtr;
+} xmlNs;
+typedef xmlNs *xmlNsPtr;
 
 /*
  * An XML DtD, as defined by <!DOCTYPE.
@@ -141,10 +170,13 @@
     const CHAR    *name;	/* Name of the DTD */
     const CHAR    *ExternalID;	/* External identifier for PUBLIC DTD */
     const CHAR    *SystemID;	/* URI for a SYSTEM or PUBLIC DTD */
+    void          *notations;   /* Hash table for notations if any */
     void          *elements;    /* Hash table for elements if any */
+    void          *attributes;  /* Hash table for attributes if any */
     void          *entities;    /* Hash table for entities if any */
     /* struct xmlDtd *next;	 * next  link for this document  */
-} xmlDtd, *xmlDtdPtr;
+} xmlDtd;
+typedef xmlDtd *xmlDtdPtr;
 
 /*
  * A attribute of an XML node.
@@ -159,7 +191,8 @@
     struct xmlAttr *next;	/* parent->childs link */
     const CHAR     *name;       /* the name of the property */
     struct xmlNode *val;        /* the value of the property */
-} xmlAttr, *xmlAttrPtr;
+} xmlAttr;
+typedef xmlAttr *xmlAttrPtr;
 
 /*
  * A node in an XML tree.
@@ -181,7 +214,9 @@
     xmlNs          *ns;         /* pointer to the associated namespace */
     xmlNs          *nsDef;      /* namespace definitions on this node */
     CHAR           *content;    /* the content */
-} xmlNode, *xmlNodePtr;
+} _xmlNode;
+typedef _xmlNode xmlNode;
+typedef _xmlNode *xmlNodePtr;
 
 /*
  * An XML document.
@@ -201,7 +236,9 @@
     struct xmlDtd  *extSubset;	/* the document external subset */
     struct xmlNs   *oldNs;	/* Global namespace, the old way */
     struct xmlNode *root;	/* the document tree */
-} xmlDoc, *xmlDocPtr;
+} _xmlDoc;
+typedef _xmlDoc xmlDoc;
+typedef xmlDoc *xmlDocPtr;
 
 /*
  * Variables.
@@ -213,110 +250,110 @@
 /*
  * Creating/freeing new structures
  */
-extern xmlDtdPtr xmlCreateIntSubset(xmlDocPtr doc, const CHAR *name,
+xmlDtdPtr xmlCreateIntSubset(xmlDocPtr doc, const CHAR *name,
                     const CHAR *ExternalID, const CHAR *SystemID);
-extern xmlDtdPtr xmlNewDtd(xmlDocPtr doc, const CHAR *name,
+xmlDtdPtr xmlNewDtd(xmlDocPtr doc, const CHAR *name,
                     const CHAR *ExternalID, const CHAR *SystemID);
-extern void xmlFreeDtd(xmlDtdPtr cur);
-extern xmlNsPtr xmlNewGlobalNs(xmlDocPtr doc, const CHAR *href, const CHAR *AS);
-extern xmlNsPtr xmlNewNs(xmlNodePtr node, const CHAR *href, const CHAR *AS);
-extern void xmlFreeNs(xmlNsPtr cur);
-extern xmlDocPtr xmlNewDoc(const CHAR *version);
-extern void xmlFreeDoc(xmlDocPtr cur);
-extern xmlAttrPtr xmlNewDocProp(xmlDocPtr doc, const CHAR *name,
+void xmlFreeDtd(xmlDtdPtr cur);
+xmlNsPtr xmlNewGlobalNs(xmlDocPtr doc, const CHAR *href, const CHAR *prefix);
+xmlNsPtr xmlNewNs(xmlNodePtr node, const CHAR *href, const CHAR *prefix);
+void xmlFreeNs(xmlNsPtr cur);
+xmlDocPtr xmlNewDoc(const CHAR *version);
+void xmlFreeDoc(xmlDocPtr cur);
+xmlAttrPtr xmlNewDocProp(xmlDocPtr doc, const CHAR *name,
                                 const CHAR *value);
-extern xmlAttrPtr xmlNewProp(xmlNodePtr node, const CHAR *name,
+xmlAttrPtr xmlNewProp(xmlNodePtr node, const CHAR *name,
                              const CHAR *value);
-extern void xmlFreePropList(xmlAttrPtr cur);
-extern void xmlFreeProp(xmlAttrPtr cur);
-extern xmlAttrPtr xmlCopyProp(xmlAttrPtr cur);
-extern xmlAttrPtr xmlCopyPropList(xmlAttrPtr cur);
-extern xmlDtdPtr xmlCopyDtd(xmlDtdPtr dtd);
-extern xmlDocPtr xmlCopyDoc(xmlDocPtr doc, int recursive);
+void xmlFreePropList(xmlAttrPtr cur);
+void xmlFreeProp(xmlAttrPtr cur);
+xmlAttrPtr xmlCopyProp(xmlAttrPtr cur);
+xmlAttrPtr xmlCopyPropList(xmlAttrPtr cur);
+xmlDtdPtr xmlCopyDtd(xmlDtdPtr dtd);
+xmlDocPtr xmlCopyDoc(xmlDocPtr doc, int recursive);
 
 /*
  * Creating new nodes
  */
-extern xmlNodePtr xmlNewDocNode(xmlDocPtr doc, xmlNsPtr ns,
+xmlNodePtr xmlNewDocNode(xmlDocPtr doc, xmlNsPtr ns,
                              const CHAR *name, CHAR *content);
-extern xmlNodePtr xmlNewNode(xmlNsPtr ns, const CHAR *name);
-extern xmlNodePtr xmlNewChild(xmlNodePtr parent, xmlNsPtr ns,
+xmlNodePtr xmlNewNode(xmlNsPtr ns, const CHAR *name);
+xmlNodePtr xmlNewChild(xmlNodePtr parent, xmlNsPtr ns,
                               const CHAR *name, CHAR *content);
-extern xmlNodePtr xmlNewDocText(xmlDocPtr doc, const CHAR *content);
-extern xmlNodePtr xmlNewText(const CHAR *content);
-extern xmlNodePtr xmlNewDocTextLen(xmlDocPtr doc, const CHAR *content, int len);
-extern xmlNodePtr xmlNewTextLen(const CHAR *content, int len);
-extern xmlNodePtr xmlNewDocComment(xmlDocPtr doc, CHAR *content);
-extern xmlNodePtr xmlNewComment(CHAR *content);
-extern xmlNodePtr xmlNewReference(xmlDocPtr doc, const CHAR *name);
-extern xmlNodePtr xmlCopyNode(xmlNodePtr node, int recursive);
-extern xmlNodePtr xmlCopyNodeList(xmlNodePtr node);
+xmlNodePtr xmlNewDocText(xmlDocPtr doc, const CHAR *content);
+xmlNodePtr xmlNewText(const CHAR *content);
+xmlNodePtr xmlNewDocTextLen(xmlDocPtr doc, const CHAR *content, int len);
+xmlNodePtr xmlNewTextLen(const CHAR *content, int len);
+xmlNodePtr xmlNewDocComment(xmlDocPtr doc, CHAR *content);
+xmlNodePtr xmlNewComment(CHAR *content);
+xmlNodePtr xmlNewReference(xmlDocPtr doc, const CHAR *name);
+xmlNodePtr xmlCopyNode(xmlNodePtr node, int recursive);
+xmlNodePtr xmlCopyNodeList(xmlNodePtr node);
 
 /*
  * Navigating
  */
-extern xmlNodePtr xmlGetLastChild(xmlNodePtr node);
-extern int xmlNodeIsText(xmlNodePtr node);
+xmlNodePtr xmlGetLastChild(xmlNodePtr parent);
+int xmlNodeIsText(xmlNodePtr node);
 
 /*
  * Changing the structure
  */
-extern xmlNodePtr xmlAddChild(xmlNodePtr parent, xmlNodePtr cur);
-extern void xmlUnlinkNode(xmlNodePtr cur);
+xmlNodePtr xmlAddChild(xmlNodePtr parent, xmlNodePtr cur);
+void xmlUnlinkNode(xmlNodePtr cur);
 
-extern xmlNodePtr xmlTextMerge(xmlNodePtr first, xmlNodePtr second);
-extern void xmlTextConcat(xmlNodePtr node, const CHAR *content, int len);
+xmlNodePtr xmlTextMerge(xmlNodePtr first, xmlNodePtr second);
+void xmlTextConcat(xmlNodePtr node, const CHAR *content, int len);
 
-extern void xmlFreeNodeList(xmlNodePtr cur);
-extern void xmlFreeNode(xmlNodePtr cur);
+void xmlFreeNodeList(xmlNodePtr cur);
+void xmlFreeNode(xmlNodePtr cur);
 
 /*
  * Namespaces
  */
-extern xmlNsPtr xmlSearchNs(xmlDocPtr doc, xmlNodePtr node,
+xmlNsPtr xmlSearchNs(xmlDocPtr doc, xmlNodePtr node,
                             const CHAR *nameSpace);
-extern xmlNsPtr xmlSearchNsByHref(xmlDocPtr doc, xmlNodePtr node,
+xmlNsPtr xmlSearchNsByHref(xmlDocPtr doc, xmlNodePtr node,
                                   const CHAR *href);
-extern void xmlSetNs(xmlNodePtr node, xmlNsPtr ns);
-extern xmlNsPtr xmlCopyNamespace(xmlNsPtr cur);
-extern xmlNsPtr xmlCopyNamespaceList(xmlNsPtr cur);
+void xmlSetNs(xmlNodePtr node, xmlNsPtr ns);
+xmlNsPtr xmlCopyNamespace(xmlNsPtr cur);
+xmlNsPtr xmlCopyNamespaceList(xmlNsPtr cur);
 
 /*
  * Changing the content.
  */
-extern xmlAttrPtr xmlSetProp(xmlNodePtr node, const CHAR *name,
+xmlAttrPtr xmlSetProp(xmlNodePtr node, const CHAR *name,
                              const CHAR *value);
-extern CHAR *xmlGetProp(xmlNodePtr node, const CHAR *name);
-extern xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const CHAR *value);
-extern xmlNodePtr xmlStringLenGetNodeList(xmlDocPtr doc, const CHAR *value,
+CHAR *xmlGetProp(xmlNodePtr node, const CHAR *name);
+xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const CHAR *value);
+xmlNodePtr xmlStringLenGetNodeList(xmlDocPtr doc, const CHAR *value,
                                           int len);
-extern CHAR *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine);
-extern void xmlNodeSetContent(xmlNodePtr cur, const CHAR *content);
-extern void xmlNodeSetContentLen(xmlNodePtr cur, const CHAR *content, int len);
-extern void xmlNodeAddContent(xmlNodePtr cur, const CHAR *content);
-extern void xmlNodeAddContentLen(xmlNodePtr cur, const CHAR *content, int len);
-extern CHAR *xmlNodeGetContent(xmlNodePtr cur);
+CHAR *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine);
+void xmlNodeSetContent(xmlNodePtr cur, const CHAR *content);
+void xmlNodeSetContentLen(xmlNodePtr cur, const CHAR *content, int len);
+void xmlNodeAddContent(xmlNodePtr cur, const CHAR *content);
+void xmlNodeAddContentLen(xmlNodePtr cur, const CHAR *content, int len);
+CHAR *xmlNodeGetContent(xmlNodePtr cur);
 
 /*
  * Internal, don't use
  */
-extern void xmlBufferWriteCHAR(const CHAR *string);
-extern void xmlBufferWriteChar(const char *string);
+void xmlBufferWriteCHAR(const CHAR *string);
+void xmlBufferWriteChar(const char *string);
 
 /*
  * Saving
  */
-extern void xmlDocDumpMemory(xmlDocPtr cur, CHAR**mem, int *size);
-extern void xmlDocDump(FILE *f, xmlDocPtr doc);
+void xmlDocDumpMemory(xmlDocPtr cur, CHAR**mem, int *size);
+void xmlDocDump(FILE *f, xmlDocPtr cur);
 int xmlSaveFile(const char *filename, xmlDocPtr cur);
 
 /*
  * Compression
  */
-extern int  xmlGetDocCompressMode (xmlDocPtr doc);
-extern void xmlSetDocCompressMode (xmlDocPtr doc, int mode);
-extern int  xmlGetCompressMode(void);
-extern void xmlSetCompressMode(int mode);
+int  xmlGetDocCompressMode (xmlDocPtr doc);
+void xmlSetDocCompressMode (xmlDocPtr doc, int mode);
+int  xmlGetCompressMode(void);
+void xmlSetCompressMode(int mode);
 
 #ifdef __cplusplus
 }
diff --git a/include/libxml/valid.h b/include/libxml/valid.h
index 6f0023a..14a7228 100644
--- a/include/libxml/valid.h
+++ b/include/libxml/valid.h
@@ -12,6 +12,20 @@
 #include "tree.h"
 
 /*
+ * ALl notation declarations are stored in a table
+ * there is one table per DTD
+ */
+
+#define XML_MIN_NOTATION_TABLE	32
+
+typedef struct xmlNotationTable {
+    int nb_notations;		/* number of notations stored */
+    int max_notations;		/* maximum number of notations */
+    xmlNotationPtr table;	/* the table of attributes */
+} xmlNotationTable;
+typedef xmlNotationTable *xmlNotationTablePtr;
+
+/*
  * ALl element declarations are stored in a table
  * there is one table per DTD
  */
@@ -21,16 +35,54 @@
 typedef struct xmlElementTable {
     int nb_elements;		/* number of elements stored */
     int max_elements;		/* maximum number of elements */
-    xmlElementPtr table;	/* the table of entities */
-} xmlElementTable, *xmlElementTablePtr;
+    xmlElementPtr table;	/* the table of elements */
+} xmlElementTable;
+typedef xmlElementTable *xmlElementTablePtr;
 
-extern xmlElementPtr xmlAddElementDecl(xmlDtdPtr dtd, char *name, int type, 
+/*
+ * ALl attribute declarations are stored in a table
+ * there is one table per DTD
+ */
+
+#define XML_MIN_ATTRIBUTE_TABLE	32
+
+typedef struct xmlAttributeTable {
+    int nb_attributes;		/* number of attributes stored */
+    int max_attributes;		/* maximum number of attributes */
+    xmlAttributePtr table;	/* the table of attributes */
+} xmlAttributeTable;
+typedef xmlAttributeTable *xmlAttributeTablePtr;
+
+/* Notation */
+xmlNotationPtr xmlAddNotationDecl(xmlDtdPtr dtd, CHAR *name,
+	       CHAR *PublicID, CHAR *SystemID);
+xmlNotationTablePtr xmlCopyNotationTable(xmlNotationTablePtr table);
+void xmlFreeNotationTable(xmlNotationTablePtr table);
+void xmlDumpNotationTable(xmlNotationTablePtr table);
+
+/* Element Content */
+xmlElementContentPtr xmlNewElementContent(CHAR *name, int type);
+xmlElementContentPtr xmlCopyElementContent(xmlElementContentPtr content);
+void xmlFreeElementContent(xmlElementContentPtr cur);
+
+/* Element */
+xmlElementPtr xmlAddElementDecl(xmlDtdPtr dtd, CHAR *name, int type, 
                                        xmlElementContentPtr content);
-extern xmlElementContentPtr xmlNewElementContent(CHAR *name, int type);
-extern xmlElementContentPtr xmlCopyElementContent(xmlElementContentPtr content);
-extern void xmlFreeElementContent(xmlElementContentPtr cur);
+xmlElementTablePtr xmlCopyElementTable(xmlElementTablePtr table);
+void xmlFreeElementTable(xmlElementTablePtr table);
+void xmlDumpElementTable(xmlElementTablePtr table);
 
-extern xmlElementTablePtr xmlCopyElementTable(xmlElementTablePtr table);
-extern void xmlFreeElementTable(xmlElementTablePtr table);
-extern void xmlDumpElementTable(xmlElementTablePtr table);
+/* Enumeration */
+xmlEnumerationPtr xmlCreateEnumeration(CHAR *name);
+void xmlFreeEnumeration(xmlEnumerationPtr cur);
+xmlEnumerationPtr xmlCopyEnumeration(xmlEnumerationPtr cur);
+
+/* Attribute */
+xmlAttributePtr xmlAddAttributeDecl(xmlDtdPtr dtd, CHAR *elem,
+	       CHAR *name, int type, int def,
+	       CHAR *defaultValue, xmlEnumerationPtr tree);
+xmlAttributeTablePtr xmlCopyAttributeTable(xmlAttributeTablePtr table);
+void xmlFreeAttributeTable(xmlAttributeTablePtr table);
+void xmlDumpAttributeTable(xmlAttributeTablePtr table);
+
 #endif /* __XML_VALID_H__ */