Big changes, seems that 1.2.0 wasn't commited, here is 1.3.0, Daniel
diff --git a/include/libxml/encoding.h b/include/libxml/encoding.h
index 3c5cee0..227abaf 100644
--- a/include/libxml/encoding.h
+++ b/include/libxml/encoding.h
@@ -25,6 +25,9 @@
 extern "C" {
 #endif
 
+/**
+ * Predefined values for some standard encodings
+ */
 typedef enum {
     XML_CHAR_ENCODING_ERROR=   -1, /* No char encoding detected */
     XML_CHAR_ENCODING_NONE=	0, /* No char encoding detected */
@@ -51,8 +54,57 @@
     XML_CHAR_ENCODING_EUC_JP=   21,/* EUC-JP */
 } xmlCharEncoding;
 
-extern xmlCharEncoding xmlDetectCharEncoding(const unsigned char* in);
-extern xmlCharEncoding xmlParseCharEncoding(const char* name);
+/**
+ * xmlCharEncodingInputFunc:
+ * @out:  a pointer ot an array of bytes to store the UTF-8 result
+ * @outlen:  the lenght of @out
+ * @in:  a pointer ot an array of chars in the original encoding
+ * @inlen:  the lenght of @in
+ *
+ * Take a block of chars in the original encoding and try to convert
+ * it to an UTF-8 block of chars out.
+ *
+ * Returns the number of byte written, or -1 by lack of space.
+ */
+typedef int (* xmlCharEncodingInputFunc)(unsigned char* out, int outlen,
+                                         unsigned char* in, int inlen);
+
+
+/**
+ * xmlCharEncodingInputFunc:
+ * @out:  a pointer ot an array of bytes to store the result
+ * @outlen:  the lenght of @out
+ * @in:  a pointer ot an array of UTF-8 chars
+ * @inlen:  the lenght of @in
+ *
+ * Take a block of UTF-8 chars in and try to convert it to an other
+ * encoding.
+ *
+ * Returns the number of byte written, or -1 by lack of space, or -2
+ *     if the transcoding failed.
+ */
+typedef int (* xmlCharEncodingOutputFunc)(unsigned char* out, int outlen,
+                                          unsigned char* in, int inlen);
+
+/*
+ * Block defining the handlers for non UTF-8 encodings.
+ */
+
+typedef struct xmlCharEncodingHandler {
+    char                       *name;
+    xmlCharEncodingInputFunc   input;
+    xmlCharEncodingOutputFunc output;
+} xmlCharEncodingHandler;
+typedef xmlCharEncodingHandler *xmlCharEncodingHandlerPtr;
+
+void xmlRegisterCharEncodingHandler(xmlCharEncodingHandlerPtr handler);
+xmlCharEncodingHandlerPtr xmlGetCharEncodingHandler(xmlCharEncoding enc);
+xmlCharEncodingHandlerPtr xmlFindCharEncodingHandler(const char *name);
+
+xmlCharEncoding xmlDetectCharEncoding(const unsigned char* in);
+xmlCharEncoding xmlParseCharEncoding(const char* name);
+
+void xmlInitCharEncodingHandlers(void);
 
 #ifdef __cplusplus
 }
diff --git a/include/libxml/entities.h b/include/libxml/entities.h
index b653542..8604057 100644
--- a/include/libxml/entities.h
+++ b/include/libxml/entities.h
@@ -66,7 +66,8 @@
 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);
+const CHAR *xmlEncodeEntities(xmlDocPtr doc, const CHAR *input);
+CHAR *xmlEncodeEntitiesReentrant(xmlDocPtr doc, const CHAR *input);
 xmlEntitiesTablePtr xmlCreateEntitiesTable(void);
 xmlEntitiesTablePtr xmlCopyEntitiesTable(xmlEntitiesTablePtr table);
 void xmlFreeEntitiesTable(xmlEntitiesTablePtr table);
diff --git a/include/libxml/parser.h b/include/libxml/parser.h
index aaab58c..0b8d22f 100644
--- a/include/libxml/parser.h
+++ b/include/libxml/parser.h
@@ -10,6 +10,7 @@
 #define __XML_PARSER_H__
 
 #include "tree.h"
+#include "xmlIO.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -22,6 +23,9 @@
 
 typedef void (* xmlParserInputDeallocate)(CHAR *);
 typedef struct xmlParserInput {
+    /* Input buffer */
+    xmlParserInputBufferPtr buf;      /* UTF-8 encoded buffer */
+
     const char *filename;             /* The file analyzed, if any */
     const CHAR *base;                 /* Base of the array to parse */
     const CHAR *cur;                  /* Current char being parsed */
@@ -169,8 +173,10 @@
 
 /*
  * Global variables: just the SAX interface tables we are looking for full
- *      reentrancy of the code !
+ *      reentrancy of the code and version infos.
  */
+extern const char *xmlParserVersion;
+
 extern xmlSAXLocator xmlDefaultSAXLocator;
 extern xmlSAXHandler xmlDefaultSAXHandler;
 
diff --git a/include/libxml/parserInternals.h b/include/libxml/parserInternals.h
index 6a31c51..b107718 100644
--- a/include/libxml/parserInternals.h
+++ b/include/libxml/parserInternals.h
@@ -614,10 +614,10 @@
 xmlParseDocTypeDecl(xmlParserCtxtPtr ctxt);
 CHAR *
 xmlParseAttribute(xmlParserCtxtPtr ctxt, CHAR **value);
-void
+CHAR *
 xmlParseStartTag(xmlParserCtxtPtr ctxt);
 void
-xmlParseEndTag(xmlParserCtxtPtr ctxt);
+xmlParseEndTag(xmlParserCtxtPtr ctxt, CHAR *tagname);
 void
 xmlParseCDSect(xmlParserCtxtPtr ctxt);
 void
diff --git a/include/libxml/xmlIO.h b/include/libxml/xmlIO.h
new file mode 100644
index 0000000..d6edcae
--- /dev/null
+++ b/include/libxml/xmlIO.h
@@ -0,0 +1,40 @@
+/*
+ * xmlIO.h : interface for the I/O interfaces used by the parser
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel.Veillard@w3.org
+ */
+
+#ifndef __XML_IO_H__
+#define __XML_IO_H__
+
+#include <stdio.h>
+#include "tree.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct xmlParserInputBuffer {
+    /* Inputs */
+    FILE          *file;    /* Input on file handler */
+    int              fd;    /* Input on a file descriptor */
+/**********
+#ifdef HAVE_ZLIB_H
+    gzFile       gzfile;     Input on a compressed stream
+#endif
+ */
+    
+    
+    xmlBufferPtr buffer;    /* Local buffer encoded in  UTF-8 */
+
+} xmlParserInputBuffer;
+
+typedef xmlParserInputBuffer *xmlParserInputBufferPtr;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_IO_H__ */