Changed the internals a lot for DOM, entity support, slight changes of API,
more (if not all) formating of function comments, started documentation, Daniel.
diff --git a/include/libxml/entities.h b/include/libxml/entities.h
index 0065245..6f971c0 100644
--- a/include/libxml/entities.h
+++ b/include/libxml/entities.h
@@ -8,8 +8,8 @@
 
 #ifndef __XML_ENTITIES_H__
 #define __XML_ENTITIES_H__
-#include "parser.h"
 
+#include "parser.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -48,6 +48,7 @@
     xmlEntityPtr table;		/* the table of entities */
 } xmlEntitiesTable, *xmlEntitiesTablePtr;
 
+
 /*
  * External functions :
  */
@@ -56,12 +57,15 @@
               const CHAR *ExternalID, const CHAR *SystemID, CHAR *content);
 extern 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 void xmlFreeEntitiesTable(xmlEntitiesTablePtr table);
 extern void xmlDumpEntitiesTable(xmlEntitiesTablePtr table);
+extern xmlParserInputPtr xmlNewEntityInputStream(xmlParserCtxtPtr ctxt,
+                                                 xmlEntityPtr entity);
 
 #ifdef __cplusplus
 }
diff --git a/include/libxml/parser.h b/include/libxml/parser.h
index d0ca958..51ba467 100644
--- a/include/libxml/parser.h
+++ b/include/libxml/parser.h
@@ -128,6 +128,8 @@
 extern xmlSAXLocator xmlDefaultSAXLocator;
 extern xmlSAXHandler xmlDefaultSAXHandler;
 
+#include "entities.h"
+
 /*
  * Interfaces
  */
diff --git a/include/libxml/tree.h b/include/libxml/tree.h
index 91677a6..2ebe2cd 100644
--- a/include/libxml/tree.h
+++ b/include/libxml/tree.h
@@ -16,7 +16,30 @@
 #endif
 
 /*
- * Type definitions
+ * The different element types carried by an XML tree
+ *
+ * NOTE: This is synchronized with DOM Level1 values
+ *       See http://www.w3.org/TR/REC-DOM-Level-1/
+ */
+typedef enum {
+    XML_ELEMENT_NODE=		1,
+    XML_ATTRIBUTE_NODE=		2,
+    XML_TEXT_NODE=		3,
+    XML_CDATA_SECTION_NODE=	4,
+    XML_ENTITY_REF_NODE=	5,
+    XML_ENTITY_NODE=		6,
+    XML_PI_NODE=		7,
+    XML_COMMENT_NODE=		8,
+    XML_DOCUMENT_NODE=		9,
+    XML_DOCUMENT_TYPE_NODE=	10,
+    XML_DOCUMENT_FRAG_NODE=	11,
+    XML_NOTATION_NODE=		12
+} xmlElementType;
+
+/*
+ * Currently we use only 8bit chars internal representation, but
+ * the parser is not tied to that, just define UNICODE to switch to
+ * a 16 bits representation.
  */
 #ifdef UNICODE
 typedef unsigned short CHAR;
@@ -84,37 +107,22 @@
     void           *_private;	/* for Corba, must be first ! */
     void           *vepv;	/* for Corba, must be next ! */
 #endif
-    int             type;       /* XML_ATTRIBUTE_NODE, must be third ! */
+    xmlElementType  type;       /* XML_ATTRIBUTE_NODE, must be third ! */
     struct xmlNode *node;	/* attr->node link */
     struct xmlAttr *next;	/* parent->childs link */
     const CHAR     *name;       /* the name of the property */
-    const CHAR     *value;      /* the value of the property */
+    struct xmlNode *val;        /* the value of the property */
 } xmlAttr, *xmlAttrPtr;
 
 /*
  * A node in an XML tree.
- * NOTE: This is synchronized with DOM Level1 values
- *       See http://www.w3.org/TR/REC-DOM-Level-1/
  */
-#define XML_ELEMENT_NODE	1
-#define XML_ATTRIBUTE_NODE	2
-#define XML_TEXT_NODE		3
-#define XML_CDATA_SECTION_NODE	4
-#define XML_ENTITY_REF_NODE	5
-#define XML_ENTITY_NODE		6
-#define XML_PI_NODE		7
-#define XML_COMMENT_NODE	8
-#define XML_DOCUMENT_NODE	9
-#define XML_DOCUMENT_TYPE_NODE	10
-#define XML_DOCUMENT_FRAG_NODE	11
-#define XML_NOTATION_NODE	12
-
 typedef struct xmlNode {
 #ifndef XML_WITHOUT_CORBA
     void           *_private;	/* for Corba, must be first ! */
     void           *vepv;	/* for Corba, must be next ! */
 #endif
-    int             type;	/* type number in the DTD, must be third ! */
+    xmlElementType  type;	/* type number in the DTD, must be third ! */
     struct xmlDoc  *doc;	/* the containing document */
     struct xmlNode *parent;	/* child->parent link */
     struct xmlNode *next;	/* next sibling link  */
@@ -135,7 +143,7 @@
     void           *_private;	/* for Corba, must be first ! */
     void           *vepv;	/* for Corba, must be next ! */
 #endif
-    int             type;       /* XML_DOCUMENT_NODE, must be second ! */
+    xmlElementType  type;       /* XML_DOCUMENT_NODE, must be second ! */
     char           *name;	/* name/filename/URI of the document */
     const CHAR     *version;	/* the XML version string */
     const CHAR     *encoding;   /* encoding, if any */
@@ -165,22 +173,27 @@
 extern void xmlFreeNs(xmlNsPtr cur);
 extern xmlDocPtr xmlNewDoc(const CHAR *version);
 extern void xmlFreeDoc(xmlDocPtr cur);
+extern xmlAttrPtr xmlNewDocProp(xmlDocPtr doc, const CHAR *name,
+                                const CHAR *value);
 extern xmlAttrPtr xmlNewProp(xmlNodePtr node, const CHAR *name,
                              const CHAR *value);
 extern xmlAttrPtr xmlSetProp(xmlNodePtr node, const CHAR *name,
                              const CHAR *value);
 extern const CHAR *xmlGetProp(xmlNodePtr node, const CHAR *name);
+extern xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const CHAR *value);
+extern CHAR *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine);
 extern void xmlFreePropList(xmlAttrPtr cur);
 extern void xmlFreeProp(xmlAttrPtr cur);
 extern xmlNodePtr xmlNewDocNode(xmlDocPtr doc, xmlNsPtr ns,
                              const CHAR *name, CHAR *content);
-extern xmlNodePtr xmlNewNode(xmlNsPtr ns, const CHAR *name, CHAR *content);
+extern xmlNodePtr xmlNewNode(xmlNsPtr ns, const CHAR *name);
 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 xmlAddChild(xmlNodePtr parent, xmlNodePtr cur);
 extern xmlNodePtr xmlGetLastChild(xmlNodePtr node);
 extern int xmlNodeIsText(xmlNodePtr node);